問題
次のコード断片をコンバイル、実行するとどうなりますか。
Number n = 0b0110;
if (n instanceof Byte b) {
System.out.println("Byte: " + b);
} else if (n instanceof Short s) {
System.out.println("Short: " + s);
} else if (n instanceof Integer i) {
System.out.println("Integer: " + i);
} else if (n instanceof Long l) {
System.out.println("Long: " + l);
} else {
System.out.println("Not Integral Number");
}
選択肢
A)コンパイルエラーになる
B)Integer: 6 が出力される
C)Short: 6 が出力される
D)Long: 6 が出力される
E)NumberFormatException が出力される
F)Not Integral Number が出力される
G)Byte: 6 が出力される
解答
A)コンパイルエラーになる
B)Integer: 6 が出力される
C)Short: 6 が出力される
D)Long: 6 が出力される
E)NumberFormatException が出力される
F)Not Integral Number が出力される
G)Byte: 6 が出力される
解説
コードの概要
- Number n = 0b0110;
0b0110
はバイナリリテラルで、10進数の6
を表します。Javaでは、このリテラルはint
型として扱われます。
- instanceof 演算子による型チェック
n
はNumber
型ですが、実際にはInteger
型であるため、各if
文で型チェックを行います。
各条件の評価
n instanceof Byte b
:n
はByte
ではないので、これはfalse
です。
n instanceof Short s
:n
はShort
ではないので、これもfalse
です。
n instanceof Integer i
:n
はInteger
型であるため、これがtrue
になり、i
に6
が代入されます。"Integer: " + i
が実行され、"Integer: 6"
が出力されます。
n instanceof Long l
:- この条件は実行されません。
else
:- ここも実行されません。
結論
したがって、このコードを実行すると B)Integer: 6 が出力される になります。
対象資格:Java SE17 認定資格