假设我有一个使用 Java 1.5 编码的 Java 项目,我使用的是更高版本的 Java,但将目标设置为 1.5。
如果代码在后来的 Java 上编译和测试正常,我是否可以保证它在实际的 Java 1.5 运行时上也能正常工作?
或者我是否需要安装我所依赖的所有 JRE 的一个版本才能确定?
JRE 中的错误会怎样?如果 1.5 中存在错误,则在 1.6 中已修复。如果我使用目标设置为 1.5 的 Java 1.6,该错误会影响我吗?
在现实情况下,这是我需要担心的问题吗?
最佳答案
假设你将目标和源设置为1.5,你只需要担心我能想到的三种主要情况:
您正在使用内部
com.sun
类,这些类可能已更改或消失(或以某种方式依赖于其他一些内部行为。)您依赖于在更高版本中修复的错误行为。
您遇到向后不兼容的更改(很少见,但已知会发生。)
What happens with bugs in the JRE? If there is a bug in 1.5, that is fixed in 1.6. If I use Java 1.6 with target set to 1.5, will that bug affect me?
如果错误在库中,那么不会影响您。 Target 仅真正规定了您编译所针对的字节码版本,您仍将使用更新后的库。如前所述,请注意,如果您依赖于这种错误行为,这可能会导致问题。
如果存在故意向后不兼容的更改,那么我所看到的所有情况都会表现为编译时错误而不是运行时错误,因此它们很容易被发现(而且通常也很容易修复。 )
我仍然提倡在发布之前在新版本的 JVM 上进行测试,但实际上,根据我的经验,这通常不是问题。
关于java - 使用最新的 JRE 而不是旧的 Java 版本,我能保证它会工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15229381/