ここで文字を 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