java - 使用最新的 JRE 而不是旧的 Java 版本,我能保证它会工作吗?

标签 java

假设我有一个使用 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/

相关文章:

java - 如何从斯坦福解析器的输出中提取名词及其相应的形容词

java - Java 中一个线程可以同时调用两个锁的 wait() (6)

java - 在 Java 中使用 keystore 进行 SSL 握手的正确设置是什么

java - 泛型XmlAdapter可以写吗

java - 同步线程抛出 CurrentModificationException

java - 从文件重定向输入时出错

java - 提取包含特定子字符串的每个完整单词

java - 使用 C3P0 时的 JDBC SQLite ATTACH 查询

java - 未使用 CORS 的 Spring Yml 配置

java - 将 int 转换为 string 并返回