我正在研究源代码不兼容和行为不兼容之间的区别,但我无法真正理解。有人可以解释一下吗
例如,如果 Java 8 和 Java 7 之间存在源代码不兼容,这是否意味着尽管在 Java 8 中运行具有这种不兼容性的 Java 7 编译代码可以正常工作,但如果我使用 Java 8 重新编译该代码,我会遇到错误?
最佳答案
是的,尽管这些情况确实很少见,而且有充分的理由。
我能想到的一个明显的例子是当 enum
和 assert
引入了关键词。
以下将使用 Java 1.4 编译:
public void foo() {
int enum = 42;
}
并且仍然可以在任何更高版本的 JVM 上运行,但它不会使用更高版本的 Java 再次编译。或者更准确地说,如果不指定 -source 1.4
,它就不会编译。 javac
的选项.
compiler bug you cited是如何意外发生这种情况的示例(即使他们提供的示例代码不是很有用,因为即使您设法编译它,在运行时它也只会抛出 NPE)。
关于java - 来源和行为兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35896324/