Не мога да разпозная разликата в следните декларации на низове в 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