gpt4 book ai didi

java - 什么时候用 '==' 运算符比较对象和基元是合法的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:47 25 4
gpt4 key购买 nike

下面的 (Java) 代码是否合法?

class Test {
Object foo() {return "";}
boolean bar() {return foo() == true;}
}

它不会针对 JDK 6 进行编译,但在 7+ 上似乎没问题。规范有变化吗?是否修复了错误?我一直在 http://bugs.eclipse.org/bugs/show_bug.cgi?id=416950 讨论并且可以在这一个上走任何一条路。

最佳答案

关于引用相等性的 JLS 在 Java 6 和 7 之间没有改变:

Chapter 15.21.3: Reference Equality Operators == and != :

If the operands of an equality operator are both of either reference type or the null type, then the operation is object equality.

It is a compile-time error if it is impossible to convert the type of either operand to the type of the other by a casting conversion (§5.5). The run-time values of the two operands would necessarily be unequal.

但是我注意到 Chapter 5.5: Casting Conversion 上有一些变化.将 boolean 值转换为对象似乎被归类为 Java 7 上的装箱约定:

An expression of a primitive type may undergo casting conversion to a reference type without error, by boxing conversion.

enter image description here

⊡表示装箱转换

因此,由于原语 true 可以转换为 Object,因此您的相等表达式在 Java 7 上可以归类为引用相等,并且不会产生编译器错误

关于java - 什么时候用 '==' 运算符比较对象和基元是合法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18731497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com