Ответ 1
Long
- это объект, а не примитив. Используя ==
, вы сравниваете опорные значения.
Вам нужно сделать:
if(str.equals(str2))
Как и во втором сравнении.
Изменить: Я понял... вы думаете, что другие объекты действуют как литералы String
. Они не *. И даже тогда вы никогда не захотите использовать ==
с литералами String
.
(* Типы Autobox реализуют мухомодный паттерн, но только для значений -128 → 127. Если вы сделали свой Long
равным 50
, у вас действительно есть две ссылки на один и тот же самый мухомодный объект. И снова, никогда не используйте == для их сравнения.)
Изменить для добавления: Это указано в Спецификации языка Java, Раздел 5.1.7:
Если значение p в боксе равно true, false, байту или char в диапазоне от \u0000 до\u007f или int или коротком числе между -128 и 127 (включительно), тогда пусть r1 и r2 - результаты любых двух бокс-преобразований p. Всегда бывает, что r1 == r2.
Обратите внимание, что Long
имеет значение не, но текущие реализации Oracle и OpenJDK делают это (1.6 и 1.7), что является еще одной причиной использования никогда T21 >
Long l = 5L;
Long l2 = 5L;
System.out.println(l == l2);
l = 5000L;
l2 = 5000L;
System.out.println(l == l2);
Выходы:
верно
ложь