ここで文字を int 型にキャストする必要がある理由は何ですか:
Integer integer= (int) 'a';
しかし、ここでキャストする必要はありませんでした:
int i='a';
Java では、'int' (プリミティブ型) は Integer (オブジェクト型) とは異なるため、最初に 'a' を int 型に変換し、次に Integer 型に変換します (int 型の変数は Integer オブジェクトによって受け入れられます)。 )
「整数」値を保持できる型がいくつかあります (数学の観点から): byte、short、int、long。それらの違いは、メモリ内で占有するバイト数、つまり最大値と最小値のみです。
それらはすべてプリミティブです。小さいプリミティブは、キャストせずに対応する高いプリミティブに割り当てることができます。
charとほぼ同じタイプですshort。対応するユニコード文字のコードを格納します。したがって、リテラルaは実際には文字のコードを表すためa、任意の整数型に割り当てることができます。ただし、char変数に割り当てられると、実際には単なるコードであるため、intキャストせずに割り当てることができます。
Integer、Long、などの型はShort、Character実際にはプリミティブ ラッパーです。これらは、プリミティブをラップする通常のクラスです。Java 5 より前では、次のように書くことはできません。
Integer ii = 5;
あなたは書かなければならなかった
Integer ii = Integer.intValue(5);
Java 5 で導入されたautoboxing : この魔法を実行する機能。これは、リテラルがコンパイル時5のように行に置き換えられることを意味します。Integer.intValue(5)
したがって、リテラルaは に置き換えられCharacter.charValue('a')ます。この式は、間違いなく変数Characterに割り当てることができない型を返します。Integerにキャストするとint解決します。この場合、リテラルaは typeintに変換され、次にオートボクシングによって に変換されるため、変数Integerに割り当てることができます。Intger