Java 7和Java 8中的javac等值运算符

3

我需要为我的课程写一篇关于Java 8中的"javac工具"的小论文。

这里有一些我不理解的东西。Oracle说,在新的Java 8中:“Java语言规范(JLS)第15.21节中等式运算符的类型规则现在由javac命令正确执行。”

“Java 8的新功能”: http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

Java语言规范: http://docs.oracle.com/javase/specs/jls/se8/jls8-diffs.pdf

我真的不明白。我以为在Java 7中它已经可以很好地工作了。有人知道我错过了什么吗?在Java 7中没有正确执行什么?

如果有人有答案,请告诉我你在哪里找到的,如果你不是偶然发现的话 ;)

2个回答

4
这里有一个报告bug的链接,报告了javac 7编译==测试不符合JLS规范的一个特例。虽然这个bug在2010年被标记为已修复,但讨论表明,它在2013年仍然存在。
简而言之,我认为Java 8的这个“特性”实际上是一个bug修复。他们并没有改变语言本身(由JLS定义),或者添加额外的标准库功能。他们只是修复了一个理想情况下本来就不应该存在的错误。

感谢您的快速回答。 - javaBeginner
非常感谢您的快速回答。所以,如果我理解正确:boolean b = (3 == (Object)null); --> 3 被转换为 Integer(装箱),然后通过扩展引用转换转换为 Object 类型。我同意您的看法,这是一个错误,但它似乎是一个相当大的错误。 - javaBeginner

0

考虑到时间,这很可能是对JDK-8013357的引用:

这段代码不应该编译:

class Main {
  public boolean func(Object obj) {
    return obj == 0;
  }
}

但是javac(自JDK 7以来接受它)。

那个例子让我感到困惑。似乎那是一个不起作用的例子。请查看Andrzej Doyle添加的链接。 - javaBeginner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接