- 締切済み
Javaのキャストについて
String a = String.valueOf(100L); String b = (String)100L; 前者は正常に実行できるが後者はコンパイルエラーになるのはなぜですか?参考書には互換性がないからと書いてありましたが、互換性の一覧表みたいなのはどこかにありますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- amanojaku1
- ベストアンサー率54% (265/488)
回答No.3 amanojaku1 >>プリミティブ型(基本データ型)とラッパークラスの参照型(オブジェクト)の自動変換がサポートされました(オートボクシング、アンボクシング)。 >下記の変数「I」は(プリミティブ型(基本データ型)ではなく)参照型(オブジェクト)ですが、自動変換されて正常に実行できます。 >ただしループ内で使うと演算するごとに自動変換の処理が入るので、パフォーマンスは劣化します。 Integer I = 1; if(0<I){ // 比較演算子も可 I = I++; // インクリメント演算子も可 }
- amanojaku1
- ベストアンサー率54% (265/488)
回答No.2 amanojaku1 >プリミティブ型(基本データ型)とラッパークラスの参照型(オブジェクト)の自動変換がサポートされました(オートボクシング、アンボクシング)。 下記の変数「I」は(プリミティブ型(基本データ型)ではなく)参照型(オブジェクト)ですが、自動変換されて正常に実行できます。 ただしループ内で使うと演算するごとに自動変換の処理が入るので、パフォーマンスは劣化します。 Integer I = 1; // オートボクシング I = I+1; //右辺の変数「I」がアンボクシングされ、「I+1」が演算され、演算結果がオートボクシングされて左辺の変数「I」に代入される
- amanojaku1
- ベストアンサー率54% (265/488)
>互換性がない プリミティブ型(基本データ型)には「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
- himajinTest
- ベストアンサー率47% (8/17)