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
因此将执行该块中的唯一语句。
现在,当我从更改数据类型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
块内的唯一语句未执行,与前面的语句相反。怎么样?
问题答案:
您正在将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
。