【Java SE17 Silver 模擬試験】B-41

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードをコンパイル、実行するとどうなりますか。

public class Main {
	public static void main(String... args) {
		System.out.println(Converter.execute("Duke"));
	}
}

class Converter {
	public static String execute(Object obj) {
		String s = "";
		if (!(obj instanceof String str))
			s = obj.toString();
		else
			s = str.toLowerCase();
		return s;
	}
}

選択肢

A)コンパイルエラーになる

B)Duke が出力される

C)NullPointerException がスローされる

D)ClassCastException がスローされる

E)duke が出力される

F)java.lang.String が出力される

解答

A)コンパイルエラーになる

B)Duke が出力される

C)NullPointerException がスローされる

D)ClassCastException がスローされる

E)duke が出力される

F)java.lang.String が出力される

解説

コードの解析

  1. Main クラス:
    • main メソッドから Converter.execute("Duke") を呼び出します。
  2. Converter クラス:
    • execute メソッドは、引数 objString 型かどうかをチェックしています。
    • instanceof 演算子とパターンマッチングを使用しています。
    • objString 型の場合、str という変数にキャストし、str.toLowerCase() を呼び出します。
    • それ以外の場合、obj.toString() を呼び出します。

main メソッドの実行

  • 引数 "Duke"String 型ですので、obj instanceof String str の条件が真になります。
  • したがって、s = str.toLowerCase(); が実行され、s には "duke" が代入されます。

結果

  • return s;"duke" が返され、System.out.println(Converter.execute("Duke")); により duke が出力されます。

選択肢の検討

A)コンパイルエラーになる
不正解。このコードは正しくコンパイルされます。

B)Duke が出力される
不正解。小文字の duke が出力されます。

C)NullPointerException がスローされる
不正解objString 型のリテラルであり、null ではありません。

D)ClassCastException がスローされる
不正解。型チェックを行っているため、キャストエラーは発生しません。

E)duke が出力される
正解。小文字で出力されます。

F)java.lang.String が出力される
不正解。出力は String そのものではなく、duke です。

前の問題へ SE17_B-40

次の問題へ SE17_B-42

対象資格:Java SE17 認定資格