我有两个变量需要比较:
Double a = 1D;
Double b = 2D;
if (a > b) {
System.out.print("Ok");
}在这种情况下,java将使用自动装箱还是比较两个对象的引用?
发布于 2011-12-17 23:49:12
数值比较运算符的每个操作数的类型必须是可转换(§5.1.8)为基本数值类型的类型,否则会发生编译时错误。在操作数上执行二进制数值提升(§5.6.2)。如果操作数的提升类型是int或long,则执行有符号整数比较;如果此提升类型是浮点或双精度,则执行浮点比较。
Section 5.6.2的开头是:
当运算符对一对操作数应用二进制数值升级时,其中每个操作数必须表示一个可转换为数值类型的值,根据需要,使用扩展转换(§5.1.2)按顺序应用以下规则以转换操作数:
所以,是的,执行了拆箱。>对引用本身没有任何意义。
更有趣的是==的情况,在这种情况下,两种选择都是可能的-在这种情况下,如果一个操作数是原语,另一个可以通过数值提升进行转换,那么就会发生这种情况。但如果两者都是引用类型,则执行引用比较。例如:
Double d1 = new Double(1.0);
Double d2 = new Double(1.0);
System.out.println(d1 == d2); // Prints false due to reference comparison发布于 2011-12-17 23:47:29
它将使用自动装箱。不能对引用执行大于的操作
https://stackoverflow.com/questions/8545835
复制相似问题