Java中的equals()方法在Long数据类型上意外工作


问题内容

首先,让我们考虑一下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因此将执行该块中的唯一语句。


现在,当我从更改数据类型IntegerLong,该语句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块内的唯一语句未执行,与前面的语句相反。怎么样?


问题答案:

您正在将a Long与进行比较int。javadoc
java.lang.Long#equals表示该equals方法

将此对象与指定对象进行比较。当且仅当参数不为null且是一个Long对象,且该Long对象包含与此对象相同的long值时,结果才为true。

System.out.println(new Long(1).equals(1L)); 现在尝试将a Long与a Long而不是a
Long与an 进行比较Integer,它将打印出来true