8

可能重复:
Java 中允许整数 == int

以下两种说法有什么区别

Long l1 = 2L;
if(l1 == 2)
    System.out.println("EQUAL");                         
if(l1.longValue() == 2)
    System.out.println("EQUAL");

他们都给出了相同的结果“相等”。但我怀疑 Long 是对象。怎么相等?

4

2 回答 2

11

正如评论中已经指出的那样,当

if(l1 == 2)

Long l1自动拆箱为其原始类型,long. 所以比较是在long和之间int

在第二种情况下,l1.longValue()将返回对象表示long的原始值,因此比较将再次在 and 之间进行。回答您的评论,看看原始类型和包装类之间的主要区别是什么?LongLonglongint

关于自动装箱的评论中给出的链接很好地涵盖了这个主题。

于 2013-02-01T08:48:30.803 回答
-1

这种行为可以通过加宽和装箱来解释。

在第一个例子中,

if(l1 == 2)

发生的情况如下:

1:编译器注意到您正在将包装器(Long)与原始值(int)进行比较,因此它将原始值装箱,导致:

if (l1 == new Integer(2))

因为 2 是一个 int (最后缺少“L”)。

2:编译器现在注意到我们正在将 Long 与 Integer 进行比较,因此它将 Integer 扩展为 Long,导致:

if (l1 == new Long(new Integer(2))

3:现在我们正在比较两个多头。

另一种情况更简单,这里的结果很简单:

如果(2L == 2)

比较原始值,即使它们是不同的类型也是允许的。

于 2013-02-01T09:07:57.870 回答