4, 5, 7, 8, 9, 10, 11 行目
【解説】
自動型変換できる場合は、キャストの必要はありません。
自動型変換できるケースは、「3.4 自動型変換」(P.61)に解説がありますが、次の2点が原則です。
- ①double型、float型の変数は、整数型の値やchar型の値ならなんでもそのまま代入できる
- ②整数型同士の場合、ビット幅の小さいものは、大きなものへ、そのまま代入できる。
図から、次のケースは自動型変換できることがわかります。
- long ← int short byte char
- int ← short byte char
- short ← byte
ただし、char型は、注意が必要です。次の点に注意してください。
- (A)負の範囲を持てないので、整数型の値をそのままでは代入できない(キャストが必要)
- (B)ただし、変数宣言時の初期化の場合だけ、char c = 123; のようにリテラルを直接代入できる
問題の6行目でキャストが不要なのは(B)によります。変数宣言時に限り、代入したリテラルをコンパイラがchar型として扱ってくれます。
ただし、
char ch;
ch = 10;
のように、宣言した後でリテラルを代入する場合はキャストが必要になります。この場合、10はint型のリテラルとみなされるからです。
また、7行目は、リテラルではなく変数を代入しているのでキャストが必要です。
10、11行目は(A)により、必ずキャストしなければなりません。
B
0x0041は、charにキャストすると'¥u0041'とみなされます。