Неопределенность конкатенации строк - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть следующий простой фрагмент кода Java, где я пытаюсь понять, как работает конкатенация строк в Java, используя оператор «+».

public class Problem {

public static void main(String... args){

    String str1 = "abc";
    String str2 = "ab";
    String str3 = "c";
    String str4 = "ab" + "c";//This will use of  StringBuilder class for concatenation and return new String object
    String str5 = str2 + str3;//This will use of  StringBuilder class for concatenation and return new String object

    System.out.println(str1 == str4); // This  returns true
    System.out.println(str1 == str5); // This  returns false

}
}

str4 является результатом 2 строковых литералов (ab и c), а str5 является ссылкой на 2 строковых литерала (str2 и str3). В обоих случаях java будет вызывать класс StringBuilder для выполнения конкатенации.

И я считаю, что это должно привести к созданию 2 разных объектов StringBuilder в пространстве кучи Java.

Если мое понимание верно, почему str1 == str4 возвращает истину? Может ли кто-нибудь помочь мне разобраться с этим?

С уважением, Маниш Шарма

1 Ответ

0 голосов
/ 11 ноября 2018

Это зависит от того, как компилятор и jvm это оптимизируют. Только если обе переменные оптимизированы так, чтобы они указывали на один и тот же адрес, оценка будет верной. В общем, использование == для сравнения строк не является надежным. Вместо этого используйте метод «равно».

...