gpt4 book ai didi

java - JDK "upward"或 "backward"是否兼容?

转载 作者:IT老高 更新时间:2023-10-28 20:21:52 31 4
gpt4 key购买 nike

向后二进制兼容性(或向下兼容性)- 使用旧版本库 API 构建的客户端能够在新版本 (wiki ) 上运行。

向上二进制兼容性(或向前兼容性)- 使用新版本库 API 构建的客户端能够在旧版本 (wiki ) 上运行。

Sun关于JDK的通用文档Incompatibilities in J2SE 5.0 since 1.4.2 (和 Java SE 6 compatibility with J2SE 5.0 也是)描述 JDK 的兼容性如下:

JDK 5.0 is upwards binary-compatible with Java 2 SDK, v1.4.2 except for the incompatibilities listed below. This means that, except for the noted incompatibilities, class files built with version 1.4.2 compilers will run correctly in JDK 5.0.

我想文档作者在这句话中混淆了术语“向上”和“向后”兼容性。他们描述了“向后”兼容性,但将此功能称为“向上”兼容性。

这是一个错字、错误或预期的术语吗?JDK“向上”还是“向后”兼容?

最佳答案

请注意,要向后兼容,就必须有一个向前兼容的对应物(有意或无意)。例如:DVD 阅读器向后兼容 CD 还是 CD 向前兼容 DVD 阅读器?

在这种情况下,这取决于您是查看编译器(或其生成的字节码)还是虚拟机。

编译器不向后兼容,因为使用 Java5 JDK 生成的字节码不会在 Java 1.4 jvm 中运行(除非使用 -target 1.4 标志编译)。但是 JVM 是向后兼容的,因为它可以运行较旧的字节码。

所以我猜他们选择从 javac 的角度考虑兼容性(因为它是特定于 JDK 的部分),这意味着生成的字节码可以在 jvm 的 future 版本中运行(这更相关到 JRE,但也捆绑在 JDK 中)。

简而言之,我们可以说:

  • JDK 是(通常)向前兼容的。
  • JRE(通常)向后兼容。

(这也是一个早就应该吸取的教训:编写编译器的人通常是对的,而我们使用它们的人是错误的xD)

顺便说一句,向后/向前和向下/向上配对比将它们混合起来更有意义吗?

关于java - JDK "upward"或 "backward"是否兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692626/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com