属性java.runtime.version和java.version有什么区别

Jok*_*eri 11 java system-properties

为了进行记录,我在运行Java程序时将Java版本写入日志中。

我发现我可以用

System.getProperty("java.runtime.version") -> 1.8.0_202-b08
Run Code Online (Sandbox Code Playgroud)

System.getProperty("java.version") -> 1.8.0_202
Run Code Online (Sandbox Code Playgroud)

结果显然在其他地方缺少“构建”信息,但是除了结果之外还有其他区别吗?在某些情况下,我应该使用第一个选项而不是第二个选项?

fan*_*cco 6

System Property Name | System Property Content  | Where Displayed in java version Output
---------------------|--------------------------|---------------------------------------
java.version         | product version          | Line one displays the product version
---------------------|--------------------------|---------------------------------------
java.runtime.version | product version          | Line one displays the product version
                     | product build identifier | Line two displays the build identifier
Run Code Online (Sandbox Code Playgroud)

J2SE SDK / JRE版本字符串命名约定文档中:

  • java.runtime.version可以扩展system属性的内容(超出java.version system属性的内容)以包含构建ID。

因此,似乎属性值可以等于java.runtime内容,也可以通过构建ID进行区分,如问题中已经指出的那样。

无论如何,如先前在对该问题的评论中所述,该java.runtime.version属性不会出现在当前记录的系统属性中


Ani*_*wat 5

java.version是Java Runtime Environment(JRE)的产品版本信息。JRE是实际执行Java程序的Java虚拟机的实现。

java.runtime.version 是产品版本以及JRE的内部版本标识符。