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