当前位置: 首页 > 面试题库 >

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

潘刚洁
2023-03-14
问题内容

首先,让我们考虑一下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与进行比较intjavadoc
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



 类似资料:
  • 问题内容: 为什么下面的代码即使 long3 == long2* 比较也返回 false ,即使它是文字。 * 问题答案: 是一个对象,而不是原始对象。通过使用您正在比较 参考值 。 您需要做: 正如您在第二次比较中所做的那样。 编辑: 我明白了…您正在考虑其他对象的行为就像文字。他们不*。即使如此,你永远要使用有任何文字。 (* Autobox类型确实实现了flyweight模式,但仅适用于-1

  • 问题内容: 我想知道PostgreSQL中的数据类型等效吗? 问题答案: 根据文档,您好像是您的朋友,范围从-9223372036854775808到9223372036854775807。

  • 方法比较两个对象值是否相等。我的问题是它如何比较这两个物体?它如何判断这两个物体是否相等?我想知道基于它对这两个对象的比较。我不包括方法。

  • 我想创建一个方法,它可以具有任意数量的参数和任何数据类型的任何方法。 为。我想动态调用以下所有方法void method1(int x,int y)void method2(int x,String y)void method3(Float x,Long y,String z) 我正在使用反射来这样做。现在我讨论了如何在调用这个动态方法的过程中向这些方法传递参数。我做了多远... 如何调用MyMe

  • 本文向大家介绍Java中AbstractSequentialList的equals()方法,包括了Java中AbstractSequentialList的equals()方法的使用技巧和注意事项,需要的朋友参考一下 该方法从Java中的AbstractList类继承。它用于检查对象与此列表是否相等。如果对象等于此列表,则返回TRUE,否则返回FALSE。 语法如下- 这里,o是要与该列表进行相等性

  • 问题内容: 我想了解Java 类型如何将其值存储在Java的内存中。当我运行以下代码时,我得到意外的输出: } 输出: 为什么不等于? 我也尝试了其他不同的值,但有时会返回预期结果,而有时则不会。 问题答案: 尽管您可能听说过舍入错误,但您可能想知道为什么这里有舍入错误。 版画 如您所见,这两个值都不能精确表示,并且在打印float或double时,会发生一些舍入操作以将其隐藏起来。在float的