public class Main {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
}
選択肢
- あなたの回答
- 正解
正解
B. true / false
詳細解説
文字列リテラルは文字列プールで管理されるため、同じ内容のリテラル s1 と s2 は同一オブジェクトを指します。一方 new String(...) は必ず新しいオブジェクトを生成するため s1 == s3 は false になります。
なぜ他の選択肢が違うのか
- new String() は常に別オブジェクトを生成するため、リテラルとは == で false になります。
- リテラル同士は文字列プールで同一インスタンスになるため == は true です。
- s1 == s2 はプールにより true となります。
罠ポイント
文字列の同値比較は equals を使うのが基本です。== はオブジェクトの参照を比較していることを忘れないようにしましょう。