首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java如何比较两个包装器变量?

问Java如何比较两个包装器变量?
EN

Stack Overflow用户
提问于 2011-12-17 23:45:27
回答 2查看 223关注 0票数 2

我有两个变量需要比较:

代码语言:javascript
复制
Double a = 1D;
Double b = 2D;

if (a > b) {
    System.out.print("Ok");
}

在这种情况下,java将使用自动装箱还是比较两个对象的引用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-17 23:49:12

来自section 15.20.1 of the JLS

数值比较运算符的每个操作数的类型必须是可转换(§5.1.8)为基本数值类型的类型,否则会发生编译时错误。在操作数上执行二进制数值提升(§5.6.2)。如果操作数的提升类型是int或long,则执行有符号整数比较;如果此提升类型是浮点或双精度,则执行浮点比较。

Section 5.6.2的开头是:

当运算符对一对操作数应用二进制数值升级时,其中每个操作数必须表示一个可转换为数值类型的值,根据需要,使用扩展转换(§5.1.2)按顺序应用以下规则以转换操作数:

  • 如果任何操作数属于引用类型,则执行拆箱转换(§5.1.8)。

所以,是的,执行了拆箱。>对引用本身没有任何意义。

更有趣的是==的情况,在这种情况下,两种选择都是可能的-在这种情况下,如果一个操作数是原语,另一个可以通过数值提升进行转换,那么就会发生这种情况。但如果两者都是引用类型,则执行引用比较。例如:

代码语言:javascript
复制
Double d1 = new Double(1.0);
Double d2 = new Double(1.0);       
System.out.println(d1 == d2); // Prints false due to reference comparison
票数 5
EN

Stack Overflow用户

发布于 2011-12-17 23:47:29

它将使用自动装箱。不能对引用执行大于的操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8545835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档