java - 来源和行为兼容性

标签 java jvm java-8 java-7

我正在研究源代码不兼容和行为不兼容之间的区别,但我无法真正理解。有人可以解释一下吗

例如,如果 Java 8 和 Java 7 之间存在源代码不兼容,这是否意味着尽管在 Java 8 中运行具有这种不兼容性的 Java 7 编译代码可以正常工作,但如果我使用 Java 8 重新编译该代码,我会遇到错误?

最佳答案

是的,尽管这些情况确实很少见,而且有充分的理由。

我能想到的一个明显的例子是当 enumassert引入了关键词。

以下将使用 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/

相关文章:

java - 将 Future 与 ExecutorService 结合使用

java - OpenCV 3.0 svm 总是预测 0 (java)

java - 如何在 Java 的 MigLayout 中强制组件增长

java - Scala 与 Java 中的循环展开

spring-boot - Apache 点燃: Possible too long JVM pause: 714 milliseconds

java - Lambda 表达式不工作,被终止

java-8 - java防止了很多if并用设计模式替换它

java - 行列迷宫递归错误

java - 如何从适配器获取用户 ID

java - 为什么我的 Java 应用程序不能在 Red Hat Linux 中使用大页面?