我有两个应该比较的变量:
Double a = 1D;
Double b = 2D;
if (a > b) {
System.out.print("Ok");
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,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
Run Code Online (Sandbox Code Playgroud)