• 締切済み

Javaのキャストについて

String a = String.valueOf(100L); String b = (String)100L; 前者は正常に実行できるが後者はコンパイルエラーになるのはなぜですか?参考書には互換性がないからと書いてありましたが、互換性の一覧表みたいなのはどこかにありますか?

  • Java
  • 回答数4
  • ありがとう数0

みんなの回答

回答No.4

回答No.3 amanojaku1 >>プリミティブ型(基本データ型)とラッパークラスの参照型(オブジェクト)の自動変換がサポートされました(オートボクシング、アンボクシング)。 >下記の変数「I」は(プリミティブ型(基本データ型)ではなく)参照型(オブジェクト)ですが、自動変換されて正常に実行できます。 >ただしループ内で使うと演算するごとに自動変換の処理が入るので、パフォーマンスは劣化します。 Integer I = 1; if(0<I){ // 比較演算子も可 I = I++; // インクリメント演算子も可 }

回答No.3

回答No.2 amanojaku1 >プリミティブ型(基本データ型)とラッパークラスの参照型(オブジェクト)の自動変換がサポートされました(オートボクシング、アンボクシング)。 下記の変数「I」は(プリミティブ型(基本データ型)ではなく)参照型(オブジェクト)ですが、自動変換されて正常に実行できます。 ただしループ内で使うと演算するごとに自動変換の処理が入るので、パフォーマンスは劣化します。 Integer I = 1; // オートボクシング I = I+1; //右辺の変数「I」がアンボクシングされ、「I+1」が演算され、演算結果がオートボクシングされて左辺の変数「I」に代入される

回答No.2

>互換性がない プリミティブ型(基本データ型)には「byte、short、int、long、float、double、char、boolean」があります(これば参照型(オブジェクト)ではありません) プリミティブ型(基本データ型)の数値型「byte、short、int、long、float、double、char」(実は「char」も16ビット符号なし整数)で「double d = (double)123;」のようなキャストが可能。 「boolean」は(プリミティブ型(基本データ型)ですが)論理値型なので、数値型とは互換性がありません。 また「String」は参照型(オブジェクト)なのでプリミティブ型(基本データ型)とは互換性がありません。 ただしプリミティブ型(基本データ型)とラッパークラスの参照型(オブジェクト)の自動変換がサポートされました(オートボクシング、アンボクシング)。 プリミティブ型 http://javazuki.com/articles/primitive-type.html プリミティブ型、参照型 オートボクシング、アンボクシング http://qiita.com/chihiro/items/870eca6e911fa5cd8e58

回答No.1

関連するQ&A

  • キャスト時に使う括弧について

    クラスAはBを継承しているとします。 そこで、bにはクラスAのインスタンスがるとして、 キャストするときは、 String str = ((A)b).getString(); のようにするかと思いますが、 String str = (((A))b).getString(); のように不要に括弧を書いて、コンパイルがエラーになる場合というか、 エラーになるコンパイラのバージョンがあるのでしょうか?

    • ベストアンサー
    • Java
  • [JAVA]互換性のない型です・・・その理由。

    こんにちわぁ♪ String[][][] TEST = (String[][][])request.getAttribute("MENU"); int TEST_neo = Integer.valueOf(TEST[0][0][3]); としてコンパイルしますと、互換性のない型ですというエラーがきてできません。 Strign→Integerの変換ってできますよね?? 配列にしてるからかな・・・?? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • Javaでコンパイルできなくなりました

    javaでコンパイルできなくなりました。今まではJava2 SDK バージョン1.4.2_03をインストールしてコマンドプロンプトからjavac、javaコマンドを用いコンパイル、実行していました。 そして、Eclipse(バーション3.0)というIDE環境に興味を持ちインストールした後にとりあえずもう一度コマンドプロンプトからjavacコンパイルしてみたらエラーがでるようになりました。 ソースを書くと長くなってしまうので簡単に説明すると、String sに"Hello World"を代入してSystem.out.println()で表示させるだけのプログラムです。Eclipseをインストールする前は実行できたのでソースに問題があるという事はありません。エラーメッセージは以下のような感じでした //エラーメッセージ 検出値 : java.lang.String 期待値 : String String s = "Hello World"; その後にソースで String s="Hello World";としていた行を java.lang.String s = "Hello World";に変更しました するとjavacではエラーが出なくなるのですがjavaコマンドで実行すると Exception in thread "main" java.lang.NoSuchMethodError: main というメッセージが出て実行できないです。 環境変数は、SDKインストール後、PATHC:\j2sdk1.4.2_03\bin;を加え、Eclipseインストール後は何も変更していません。 何が問題なのでしょうか?お願いします。

    • ベストアンサー
    • Java
  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • Javaでいきなり、つまづきました。 

    test.java:45:互換性のない型 検出値:java.lang.Object 期待値:test.test2 Test a = test.input( x ); エラー 1個 Javaは初めてです。 JDK5があるということで、Windowsにインストールしてサンプルをコンパイルしました。 そうすると、上のようなエラーメッセージが表示されました。 いきなりつまづいたのですが、初心者がすべき手順が知りたいのです。 環境を整えるに当たって、是非必要なツールや このようにエラーメッセーに対する一覧で簡単な解説が書いているような本を探しています。 またJavaFAQのような書籍もあれば、まず必要な知識をもって対処した方が 早いかなと思って居ます。

    • ベストアンサー
    • Java
  • java

    コンパイルできても、実行ができません。 次のようなエラーがでます。 このエラーはどのようなエラーなのでしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: test コードはただたんにHello JAVA と表示させるだけです。 class Test{ public static void main(String args[]){ System.out.println("Hello Java\n"); } }

    • ベストアンサー
    • Java
  • JAVAのコンパイルについて教えてください。

    public class exam05d { public static void main(String[] args) { int value=args[0]; if(value==0) { System.out.println("valueの値は0"); } else { System.out.println("valueの値は0以外"); } } } 上記のプログラムをコンパイルすると exam05d.java:3: 互換性のない型 検出値:java.lang.String 期待値:int int value=args[0]; というエラーが出てしまいます。 これを正常に動作させるにはどう改良すれば良いか教えて頂けないでしょうか。 また変更を行わなければならない理由も教えていただけると有難いです。 プログラミングを始めたばかりで行き詰っています。 回答お待ちしております。

  • Javaのコンストラクタについて教えてください

    Javaを勉強している初心者です。 次のようなプログラムがあります。 このプログラムでclass aおよびclass bのデフォルトコンストラクタ a() {}とb() {}をコーディングしていないとコンパイルエラーになります。 b() {}についてはclass bのパラメータのあるコンストラクタb(String s)がサブクラスclass cから明示的に呼ばれていないのでデフォルトコンストラクタb() {}をコーディングしないとエラーになる…と考えればよいのでしょうか。 それでは、a() {}はなぜ必要なのでしょうか。 どなたか教えてください。 class a { a() {} a(String s) { System.out.println("In a's constructor..."); System.out.println(s); } } class b extends a { b() {} b(String s) { super(s); System.out.println("In b's constructor..."); System.out.println(s); } } class c extends b { c(String s) { System.out.println("In c's constructor..."); System.out.println(s); } public void some() { System.out.println("something..."); } } public class appJ01 { public static void main(String args[]) { c obj = new c("Hello from Java!"); } } 

  • Java コレクション・ジェネリクスについて

    Javaのコレクション・ジェネリクスについてです。 以下のコードについて、私はa.y();でAインタフェイスにyメソッドがないため コンパイルエラーになるのではないかと思っているのですが(実際にエラーが出ている) 書籍では「実行されるがなにも表示されない」とあります。 もし私の考え方に間違いがあればご指摘いただけると幸いです。 ocj-pを受験目前なので切実です。 よろしくお願いいたします。 interface A { void x(); } class B implements A { public void x(){} public void y(){} } class C extends B public void x(){} } public class D { public static void main(String[] args) { List<A> list = new ArrayList<A>(); list.add(new B()); list.add(new C()); for(A a : list) { a.x(); a.y(); } } }

    • ベストアンサー
    • Java
  • Javaについて教えてください!

    OyaクラスのメインメソッドからKoクラス内のメソッドを呼び出して文字列の出力を行いたいのですが、今のままではエラーが出てコンパイル出来ません。どこが間違っているか教えてください!ちなみにエクリプスでの実行には問題はありません。 public class Ko{ public static void ko(){ String str = "KO"; System.out.println(str); }} public class Oya{ public static void main(String[] args){ Ko.ko(); }}

    • ベストアンサー
    • Java

専門家に質問してみよう