問題
次のコードをコンバイル、実行するとどうなりますか。
public class Main {
public static void main(String[] args) {
long x, y, z;
x = 100;
y = 1000L;
System.out.println("x:" + x + ", y:" + y + ", Z:" + z);
}
}
選択肢
A)NumberFormatException がスローされる
B)x:100, y:1000, z:null が出力される
C)コンパイルエラーになる
D)x:100, y:1000L, z:0 が出力される
E)x:100, y:1000, z:0 が出力される
F)x:100, y:1000L, z:null が出力される
G)NullPointerException がスローされる
解答
A)NumberFormatException がスローされる
B)x:100, y:1000, z:null が出力される
C)コンパイルエラーになる
D)x:100, y:1000L, z:0 が出力される
E)x:100, y:1000, z:0 が出力される
F)x:100, y:1000L, z:null が出力される
G)NullPointerException がスローされる
解説
各行の解説
- 変数の宣言:
long x, y, z;
では、3つのlong
型変数を宣言しています。- しかし、これらの変数は初期化されていないため、使用する前に値を設定する必要があります。
- x の初期化:
x = 100;
でx
に100
を代入しています。この操作は問題ありません。
- y の初期化:
y = 1000L;
でy
に1000L
を代入しています。1000L
はlong
型のリテラルであり、こちらも問題ありません。
- z の使用:
System.out.println("x:" + x + ", y:" + y + ", z:" + z);
では、z
を使用していますが、z
は初期化されていません。Javaではローカル変数は自動的に初期化されないため、使用する前に必ず値を設定する必要があります。- 初期化されていない変数を使用すると、コンパイル時にエラーが発生します。具体的には「変数 z が初期化されていません」といったエラーメッセージが表示されます。
結論
このコードはコンパイルエラーになり、正しい選択肢は:
- C)コンパイルエラーになる
注意点
- もし
z
に何らかの値(例えば0
)を代入してから出力する場合、コードは正常に動作し、z
の値が表示されることになります。しかし、現状のコードではz
は初期化されていないため、エラーが発生します。
対象資格:Java SE17 認定資格