Java7和Java8中的javac相等运算符

Java7和Java8中的javac相等运算符,java,Java,我必须为我的班级写一篇关于Java8中的“javac工具”的小论文 有件事我不明白。 Oracle表示,在新的Java 8中:“Java语言规范(JLS)第15.21节中的相等运算符的类型规则现在由javac命令正确执行。” “Java 8中的新功能”: Java语言规范: 我真的不明白。我认为它在Java7中工作得很好。有人知道我错过了什么吗?在Java7中有什么没有“正确实施” 如果有人有答案,你能告诉我你在哪里找到的吗?如果你不是碰巧发现的话 这里有一个报告,其中JavaC7将编译一个

我必须为我的班级写一篇关于Java8中的“javac工具”的小论文

有件事我不明白。 Oracle表示,在新的Java 8中:“Java语言规范(JLS)第15.21节中的相等运算符的类型规则现在由javac命令正确执行。”

“Java 8中的新功能”:

Java语言规范:

我真的不明白。我认为它在Java7中工作得很好。有人知道我错过了什么吗?在Java7中有什么没有“正确实施”

如果有人有答案,你能告诉我你在哪里找到的吗?如果你不是碰巧发现的话

这里有一个报告,其中JavaC7将编译一个根据JLS无效的
=
测试。尽管该漏洞在2010年被标记为已修复,但它在2013年仍然显现出来


简而言之,我会认为java 8的这个“特性”真的是一个错误修复。他们实际上没有改变语言本身(如JLS所定义的),也没有添加额外的标准库功能。他们刚刚修复了一个从一开始就不可能出现的错误。

考虑到时间,这可能是指:

此代码不应编译:

但是javac(因为jdk7接受它)


谢谢你的快速回答。谢谢你的快速回答。所以,如果我得到的是正确的:布尔b=(3==(Object)null);-->3转换为整数(装箱),然后通过加宽引用转换为类型对象。我同意你的观点,这是一个bug,但它似乎是一个相当大的bug。这个例子让我困惑。这似乎就是一个例子,它不起作用。请参阅Andrzej Doyle添加的链接。
class Main {
  public boolean func(Object obj) {
    return obj == 0;
  }
}