Я не могу распознать разницу в следующих объявлениях строк в Java.
Предположим, у меня есть две строки
String str1="one";
String str2="two";
В чем разница между
String str3=new String(str1+str2);
а также
String str3=str1+str2;
В обоих приведенных выше объявлениях содержимое str3
будет onetwo
.
Предположим, я создаю новую строку
String str4="onetwo";
Тогда ни в одном из приведенных выше объявлений
if(str4==str3) {
System.out.println("This is not executed");
}
Почему str3
и str4
не относятся к одному и тому же объекту?
==
для сравнения строк - person Apurva   schedule 22.03.2015str4
иstr3
- person kevin gomes   schedule 22.03.2015Why and where str3 and str4 are referring to different location
Как вы думаете, почему они должны иметь одинаковую ссылку? - person Tom   schedule 22.03.2015String str3=str1+str2
должна была быть интернированной строкой, аstr4
должна относиться к тому же месту, что иstr3
- person kevin gomes   schedule 22.03.2015String str3=str1+str2
должен был быть интернированным нет, компилятор не может быть уверен в значениях нефинальных переменных, поэтому он не может конкатенировать их во время компиляции, как это может быть в случае"foo"+"bar"
и интернировать его. Он скомпилирует его вnew StringBuilder(str1).append(str2).toString()
, и этот результат не будет интернирован. - person Pshemo   schedule 22.03.2015