Я хочу продемонстрировать с помощью нескольких строк кода на Java, что для сравнения двух строк ( String
) вы должны использовать equals ()
вместо оператора ==
.
Вот что я пробовал:
public static void main(String Args[]) {
String s1 = "Hello";
String s2 = "Hello";
if (s1 == s2)
System.out.println("same strings");
else
System.out.println("different strings");
}
Я ожидал такого вывода: разные строки
, потому что с тестом s1 == s2
я фактически сравниваю две ссылки (то есть адреса) вместо содержимого объекта.
Но на самом деле я получил такой результат: одинаковые строки
!
Просматривая Интернет, я обнаружил, что некоторые реализации Java оптимизируют приведенный выше код, так что s1
и s2
будут фактически ссылаться на одну и ту же строку.
Ну, как могу ли я продемонстрировать проблему с помощью оператора ==
при сравнении строк (или объектов) в Java?
Итак, как я могу продемонстрировать проблему, используя оператор == при сравнении строк (или объектов) в Java?
Вот способ:
String s = "ab";
String t = new String("ab");
System.out.println(s == t); // false
Также будьте осторожны при сравнении примитивных оболочек и использовании автоупаковки: Integer (и Long), например, кэширует (и повторно использует!) значения -128..127. Итак:
Integer s = -128;
Integer t = -128;
System.out.println(s == t);
напечатает true
, а
Integer s = -129;
Integer t = -129;
System.out.println(s == t);
напечатает false
!