如果在调用JVM时多次指定System属性,将使用哪个值?

dy2hfwbg  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(99)

如果我在调用JVM时多次指定一个系统属性,那么当我检索该属性时,我实际上会得到哪个值?

java -Dprop=A -Dprop=B -jar my.jar

当我调用System.getProperty("prop");时会得到什么结果?
在这方面的Java documentation并没有真正告诉我任何有用的东西。
在我对几台运行不同JVM的机器进行的非科学测试中,似乎最后一个值是返回的值(这实际上是我需要的行为),但我想知道是否在任何地方都正式定义了这种行为,或者它在JVM之间是否会有所不同?

eqfvzcg8

eqfvzcg81#

没有什么比写一个小类来看看它是如何工作的了。

public class PropTest {

  public static void main(String[] args) {
    System.out.println(System.getProperty("prop"));
  }

}

当使用命令行编译和运行时

java -Dprop=A -Dprop=B -Dprop=C PropTest

产出

C

这意味着值从左到右地放入表中,最后一个值覆盖前面的值。
请注意环境,Fedora 16,Linux 3.3.7,64位

> java -version

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (fedora-65.1.11.1.fc16-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
tv6aics1

tv6aics12#

java.util.System类由一个Properties类支持,它只是Hashtable的一个扩展。假设在作为参数传递给JVM时按顺序读取值,那么最后分配的值将是最终值。

nfeuvbwi

nfeuvbwi3#

我不确定是否有针对Oracle的文档。
根据IBM JRE documents
命令行上Java选项的顺序定义了启动期间哪些选项优先。最右边的选项优先于最左边的选项。

相关问题