我有两个应该比较的变量:
Double a = 1D;
Double b = 2D;
if (a > b) {
System.out.print("Ok");
}
在这种情况下,java会使用自动装箱还是比较两个对象的引用?
答案 0 :(得分:5)
开头数值比较运算符的每个操作数的类型必须是可转换(第5.1.8节)到基本数字类型的类型,否则会发生编译时错误。对操作数执行二进制数字提升(第5.6.2节)。如果提升类型的操作数是int或long,则执行有符号整数比较;如果此提升类型为float或double,则执行浮点比较。
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则依次使用扩展转换(第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)
它将使用自动装箱。你不能比参考文献做得更好