30歳からのゲーム開発記録

30才未経験でSEに転職した人のブログ

【Java】文字列比較についてのメモ

同一の文字列オブジェクトを参照しているため、==演算子で比較するとtrue

String str1 = "abc";
String str2 = str1;
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


異なる文字列オブジェクトのため、==演算子で比較するとfalse

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1 == str2) {
    System.out.println("不成立");  // 出力されない
} else if (str1.equals(str2)) {
    System.out.println("成立");    // 出力される
}


文字列から暗黙に生成されるStringオブジェクトは、文字列の内容が一致すれば同一のStringオブジェクト

String str1 = "abc";
String str2 = "abc";
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


文字列の内容を比較する場合は、常にequalsメソッドを使用

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1.equals(str2)) {
    System.out.println("成立");  // 出力される
}


StringBuilderオブジェクトを比較する場合は、contentEqualsメソッドを使用

StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc");
if(sb1 == sb2) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.equals(sb2)) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.toString().contentEquals(sb2)) {
    System.out.println("成立");      // 出力される
}