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

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

問題

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

public class Main {
	public static void main(String... args) {
		String s = "Java";
		String t = new String("Java");
		Item a = new Item(17);
		Item b = new Item(17);
		if (s == t) System.out.print("s == t, ");
		else System.out.print("s != t, ");
		if (s.equals(t)) System.out.print("s.equals(t), ");
		else System.out.print("!s.equals(t), ");
		if (a == b) System.out.print("a == b, ");
		else System.out.print("a != b, ");
		if (a.equals(b)) System.out.print("a.equals(b), ");
		else System.out.print("!a.equals(b), ");
	}
}

class Item {
	int id;

	Item(int id) {
		this.id = id;
	}
}

選択肢

A)s == t, s.equals(t), a == b, a.equals(b), が出力される

B)s != t, s.equals(t), a != b, a.equals(b), が出力される

C)s == t, !s.equals(t), a != b, a.equals(b), が出力される

D)s != t, s.equals(t), a != b, !a.equals(b), が出力される

E)s == t, !s.equals(t), a == b, a.equals(b), が出力される

F)s != t, !s.equals(t), a != b, !a.equals(b), が出力される

G)s == t, s.equals(t), a != b, !a.equals(b), が出力される

解答

A)s == t, s.equals(t), a == b, a.equals(b), が出力される

B)s != t, s.equals(t), a != b, a.equals(b), が出力される

C)s == t, !s.equals(t), a != b, a.equals(b), が出力される

D)s != t, s.equals(t), a != b, !a.equals(b), が出力される

E)s == t, !s.equals(t), a == b, a.equals(b), が出力される

F)s != t, !s.equals(t), a != b, !a.equals(b), が出力される

G)s == t, s.equals(t), a != b, !a.equals(b), が出力される

解説

このコードの動作を分析して、出力される結果を考えましょう。

  1. String s と t の比較:
    • String s = "Java"; では、文字列リテラルを使って s を定義しています。
    • String t = new String("Java"); では、新しい String オブジェクトを作成しています。
    • s == t はオブジェクトの参照を比較しますが、st は異なるオブジェクトを参照しているため、この比較は false となります。
    • s.equals(t) は文字列の内容を比較しますが、st は同じ文字列 “Java” であるため、この比較は true となります。
  2. Item a と b の比較:
    • Item a = new Item(17);Item b = new Item(17); では、それぞれ異なる Item オブジェクトを作成しています。
    • a == b は参照の比較ですが、ab は異なるオブジェクトを参照しているため、この比較は false となります。
    • a.equals(b) はデフォルトでは Object クラスの equals メソッドを呼び出し、オブジェクトの参照を比較します。したがって、この比較も false になります。

まとめ:

  • s == tfalse
  • s.equals(t)true
  • a == bfalse
  • a.equals(b)false

したがって、出力は次のようになります

s != t, s.equals(t), a != b, !a.equals(b), 

前の問題へ SE17_B-45

次の問題へ SE17_B-47

対象資格:Java SE17 認定資格