同一の文字列オブジェクトを参照しているため、==演算子で比較すると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("成立"); // 出力される }