Сначала рассмотрим следующие выражения в Java.
Integer temp = new Integer(1);
System.out.println(temp.equals(1));
if(temp.equals(1))
{
System.out.println("The if block executed.");
}
Все эти утверждения работают нормально. В этом нет никаких сомнений. Выражение temp.equals(1) оценивается как true, как ожидалось, и поэтому выполняется только оператор внутри блока if.
Теперь, когда я изменяю тип данных от Integer до Long, оператор temp1.equals(1) неожиданно оценивается как false следующим образом.
Long temp1 = new Long(1);
System.out.println(temp1.equals(1));
if(temp1.equals(1))
{
System.out.println("The if block executed.");
}
Это эквивалентные утверждения, упомянутые в предыдущем фрагменте, только тип данных был изменен, и они ведут себя совершенно противоположно.
Выражение temp1.equals(1) оценивается как false, и, следовательно, единственный оператор в блоке if не выполняется, чем обратное предыдущим операторам. Как?