2015-10-21 3 views
0

Когда мы делаем:Java "а" == "а" операция

String a = new String("abc"); 
String b = new String ("abc"); 

и сделать a == b он возвращает ложных, потому что они 2 Diferent объектов.
Но когда мы имеем это:

String c = "abc"; 
String d = "abc"; 

и мы делаем c == d возвращает истинную. Почему это? Должен ли он также возвращать ложь? Почему оператор == ведет себя как метод .equals() в этом случае?

+0

Во втором случае строка помещается в пул, так что у них есть память commom – silentprogrammer

+0

. Строковый пул является причиной. Для получения дополнительной информации проверьте ссылки, упомянутые выше. – SacJn

+0

Большое вам спасибо @azurefrog – alexandre1985

ответ

1

Это происходит потому, что Java использует так называемый Stringpool и пытается повторно использовать старые String-Literals для сохранения некоторой памяти. Но если вы говорите «новая строка», вы всегда создаете новый объект на основе Literal. См.: here. Я предлагаю вам всегда использовать Objects.equals (a, b), если вы хотите удостовериться, что объекты равны (или вызывают равные по самому объекту, если вы уверены, что это не нуль).

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

  • Нет связанных вопросов^_^