2012-05-27 2 views
2

Можно создать дубликат:
String equality vs equality of locationПочему две строки с тем же именем имеют один и тот же экземпляр объекта?

Это мой первый вопрос, будьте терпеливы со мной, пожалуйста,

У меня есть следующий код:

String str1 = "hello"; 
String str2 = "hello"; 
System.out.println(str1 == str2); 

И Результатом является tru e

Почему?

+8

Строка литерального интернирования. –

+0

Возникает вопрос: «Почему это работает, когда нет других сравнений?» или «почему язык определен таким образом?» – templatetypedef

+0

Оба вопроса очень интересны, не могли бы вы объяснить их? Но мой вопрос был первым – Jdoe

ответ

2

Когда Java находит то же литералы во время компиляции он создает один экземпляр и ссылку, что все ссылки.

str1 и str2 оба имеют одинаковые литералы «привет», поэтому jvm создает один экземпляр этого объекта и присваивает его str1 и str2.

Итак, когда вы выполняете str1 == str2, вы становитесь правдивыми. (Оба ссылаются на один и тот же экземпляр)

-4

Поскольку == означает равным, так что вы говорите str1 и str2 равны друг друг .. И это правда да

+0

Это не обязательно так. – Hassan

+1

@ Hassan Оставьте «обязательно» :) Это ** никогда ** не верно. Существует ** никогда ** сравнение по строковому значению. –

+0

Согласен, '==' возвращает 'true', когда примитивы twp * равны или когда два объекта указывают на одно и то же место в памяти (что и есть, что-то примитивные). Строки, если они определены как OP, внутренне перенаправляются в одно и то же место в памяти, поэтому они равны. – Jon

Смежные вопросы