Java如何比较两个包装器变量?
我有两个变量需要比较:Java如何比较两个包装器变量?,java,autoboxing,Java,Autoboxing,我有两个变量需要比较: Double a = 1D; Double b = 2D; if (a > b) { System.out.print("Ok"); } 在这种情况下,java将使用自动装箱或比较两个对象的引用?它将使用自动装箱。您不能在以下引用中执行大于的操作: 数值比较运算符的每个操作数的类型必须是可转换为原始数值类型的类型,否则会发生编译时错误。对操作数§5.6.2执行二进制数字提升。如果提升后的操作数类型为int或long,则执行有符号整数比较;如果此提升类型为
Double a = 1D;
Double b = 2D;
if (a > b) {
System.out.print("Ok");
}
在这种情况下,java将使用自动装箱或比较两个对象的引用?它将使用自动装箱。您不能在以下引用中执行大于的操作: 数值比较运算符的每个操作数的类型必须是可转换为原始数值类型的类型,否则会发生编译时错误。对操作数§5.6.2执行二进制数字提升。如果提升后的操作数类型为int或long,则执行有符号整数比较;如果此提升类型为浮点或双精度,则执行浮点比较 首先是: 当运算符将二进制数字提升应用于一对操作数(每对操作数必须表示可转换为数字类型的值)时,以下规则依次适用,必要时使用加宽转换§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