比较java中的Long值

时间:2013-02-01 08:40:11

标签: java

  

可能重复:
  Integer == int allowed in java

以下两个陈述之间有什么区别

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

他们两个都给出了相同的结果“EQUAL”。但我怀疑龙是对象。它是如何平等的?

2 个答案:

答案 0 :(得分:11)

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

if(l1 == 2)

Long l1会自动取消装箱到其原始类型long。因此,比较是longint之间的比较。

在第二种情况下,l1.longValue()将返回由long对象表示的Long的{​​{1}}值作为基元,因此将再次进行比较在Longlong之间。回答your comment,请查看What is the main difference between primitive type and wrapper class?

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

答案 1 :(得分:-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:现在我们正在比较两个龙。

另一种情况比较简单,结果很简单:

  

if(2L == 2)

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