問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
MyClass c = new MyClass();
c.calc(10, 3.14f);
}
}
class MyClass {
public void calc(long a, float b) {
System.out.print("A: " + a + b);
}
public void calc(int a, Float b) {
System.out.print("B: " + a + b);
}
public void calc(Integer a, double b) {
System.out.print("D: " + a + b);
}
}
選択肢
A)C: 103.14 が出力される
B)B: 13.14が出力される
C)A: 13.14が出力される
D)NumberFormatException がスローされる
E)C: 13.14が出力される
F)コンパイルエラーになる
G)A: 103.14 が出力される
H)B: 103.14 が出力される
解答
A)C: 103.14 が出力される
B)B: 13.14が出力される
C)A: 13.14が出力される
D)NumberFormatException がスローされる
E)C: 13.14が出力される
F)コンパイルエラーになる
G)A: 103.14 が出力される
H)B: 103.14 が出力される
解説
public class Main {
public static void main(String... args) {
MyClass c = new MyClass(); //1. インスタンス化
c.calc(10, 3.14f); //2. 引数に10と3.14f
}
}
class MyClass {
public void calc(long a, float b) { //3. 2からの引数の10と3.14fを受け取る
System.out.print("A: " + a + b); //4. A: 103.14を出力
}
public void calc(int a, Float b) { //Floatはラッパークラスで、float型を受け取れない
System.out.print("B: " + a + b);
}
public void calc(Integer a, double b) { //Integerはラッパークラスで、long型を受け取れない
System.out.print("D: " + a + b);
}
}
MyClass c = new MyClass();
で MyClass
のインスタンスを作成します。c.calc(10, 3.14f);
が呼ばれると、引数は int
型の 10
と float
型の 3.14f
です。メソッド calc(long a, float b)
が呼ばれます。int
型の 10
は long
型に自動的に変換されるため、a
には 10
が渡され、b
には 3.14f
が渡されます。System.out.print("A: " + a + b);
により、10
と 3.14
が連結されて出力されます。ここで、a
は 10
、b
は 3.14
なので、最終的に出力は A: 13.14
になります。
対象資格:Java SE17 認定資格