Java如何比较两个包装变量?

时间:2011-12-17 15:45:27

标签: java autoboxing

我有两个应该比较的变量:

Double a = 1D;
Double b = 2D;

if (a > b) {
    System.out.print("Ok");
}

在这种情况下,java会使用自动装箱还是比较两个对象的引用?

2 个答案:

答案 0 :(得分:5)

来自section 15.20.1 of the JLS

  

数值比较运算符的每个操作数的类型必须是可转换(第5.1.8节)到基本数字类型的类型,否则会发生编译时错误。对操作数执行二进制数字提升(第5.6.2节)。如果提升类型的操作数是int或long,则执行有符号整数比较;如果此提升类型为float或double,则执行浮点比较。

Section 5.6.2以:

开头
  

当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则依次使用扩展转换(第5.1.2节)进行转换必要时操作数:

     
      
  • 如果任何操作数是引用类型,则执行拆箱转换(第5.1.8节)。
  •   

是的,执行拆箱。 >对于引用本身没有意义。

更有意思的是==情况,其中两个选项都可以 - 在这种情况下,如果 操作数是基元而另一个可以是通过数字促销转换,然后发生...但如果两个都是引用类型,则执行引用比较。例如:

Double d1 = new Double(1.0);
Double d2 = new Double(1.0);       
System.out.println(d1 == d2); // Prints false due to reference comparison

答案 1 :(得分:0)

它将使用自动装箱。你不能比参考文献做得更好