мы делаем следующие объекты String?Ссылка на строку?
String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
Два вопроса по выше:
system.out.println("valof str1 "+str1);
- это печатаетstr1
, как ABC Но когда мы сравниваемif(str1==str2)
, он сравнивает refrences струнной объекта. Как делает jvm получить differnce?str1
имеет различную ссылку изstr2
иstr3
ноstr3
иstr4
имеют одинаковые ссылки, так же JVM проверить, если строка, которую мы будем создавать с использованием соответствующим оператором (вместо нового) уже существует (если он существует, то он не создает новый объект просто присваивает тот же refernce новой переменной, то естьstr4
), но он не делает эту вердикцию в случае нового оператора?
FYI вы можете вызвать s.intern(), чтобы ставить любую строку. –
@Spike: Действительно, я обновил свой ответ, чтобы продемонстрировать это. (Я все же планировал поставить это в самом начале, но так как я хотел получить первое сообщение в «Самый быстрый пистолет на Западе» --- я обычно отправляю что-то основное, а затем расширяю его в пределах 5-минутной грации период.) –
Спасибо, Крис за то, что дал проницательное объяснение. Но у меня ниже запросов на ваше объяснение: - 1) если мы создали str1 = new String («ABC») // он не добавлен в пул до сих пор .correct? но когда мы делаем str1.intern(), он добавляет str1 в пул. Моя точка 1 остается без ответа. Если мы выполняем if (str1 == str2), она сравнивает ссылку, но при печати str1 внутри sys out она фактически печатает значение? –