为什么==在Long对象中产生true

时间:2013-06-24 05:41:37

标签: java immutability

在这段代码中,(story * 2) == tail正在获取True

false distance + 1 != tail

==检查引用,因为Long是不可变的,对于两个不同的对象它将为false,

此处值story * 2在引用tail时相等,但它们是两个不同的对象,而不是用于汇集的编译时常量。

   public class Test2 
{
         public static void main(String [] args) {

              Long tail = 2000L;
              Long distance = 1999L;
              Long story = 1000L;

                  System.out.println(tail > distance);

                  System.out.println((story * 2) == tail);

              if((tail > distance) ^ ((story * 2) == tail))
                  System.out.print("1");

              System.out.println(distance + 1 != tail);
              System.out.println((story * 2) == distance);

              if((distance + 1 != tail) ^ ((story * 2) == distance))
              System.out.print("2");

}

我查了here,但没有解释。

3 个答案:

答案 0 :(得分:7)

当您对包裹的基元(例如Long)执行算术运算时,它们会自动拆箱为原始基元(例如long)。

请考虑以下事项:

(story * 2) == tail

首先,story longlong,并乘以2。要将结果Long与右侧的public static void main(String[] args) { Long tail = 2000L; Long story = 1000L; System.out.println((story * 2) == tail); // prints true System.out.println(new Long(story * 2) == tail); // prints false } 进行比较,后者也会自动取消装箱。

这里没有比较参考文献。

以下代码演示了这一点:

{{1}}

答案 1 :(得分:4)

我相信这是由于自动取消装箱(故事* 2)导致原始值2000L。并且当你将它与也保持2000L值的尾部进行比较时,结果是正确的。当一个项目是原始的时,请检查x == y规则。

enter image description here

来源:http://www.javapractices.com/topic/TopicAction.do?Id=197

答案 2 :(得分:0)

只能对基元执行乘法,加法和其他操作......

当您执行这些操作时,所有盒装基元将被取消装箱并视为基本类型。

因此,在您的示例中,==检查长对等而不是对象相等。