キャストで範囲を超える
出力はどれか。
public class Main {
public static void main(String[] args) {
int i = 130;
byte b = (byte) i;
System.out.println(b);
}
}
- A
130 - B
-126 - C
127 - D コンパイルエラーになる
正解と解説を見る
正解: B
- A: キャストすると範囲に収まるように上位ビットが切り捨てられるので、130 のままにはなりません。
- B: 130 は byte の範囲を超えるので、上位ビットが切り捨てられて -126 になります。
- C: 範囲の最大値 (127) に丸められるわけではありません。
- D: 明示的にキャストしているので、縮小変換でもコンパイルできます。
ポイント
- 大きい型から小さい型への代入にはキャストが必要です。範囲外の値は上位ビットが切り捨てられ、130 は -126 になります。