リテラルと new String
出力はどれか。
public class Main {
public static void main(String[] args) {
String a = "Java";
String b = "Java";
String c = new String("Java");
System.out.println((a == b) + " " + (a == c) + " " + a.equals(c));
}
}
- A
true false true - B
true true true - C
false false true - D
true false false
正解と解説を見る
正解: A
- A: 同じリテラルはプールの同じオブジェクト (true)、new は別のオブジェクト (false)、equals は中身で比べる (true) です。
- B:
new String(...)は必ず新しいオブジェクトを作るので、a == cは false です。 - C: 同じ文字列リテラルは同じオブジェクトを指すので、
a == bは true です。 - D: equals は中身を比べるので、別のオブジェクトでも true です。
ポイント
==は同じオブジェクトか、equalsは中身が同じかを比べます。- 同じ文字列リテラルは「文字列プール」の同じオブジェクトが使われます。
new String(...)は必ず新しいオブジェクトを作ります。
「文字列の作成と操作 (テキスト・ブロックを含む)」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)