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

时间:2012-06-08 22:20:11

标签: java jvm system-properties

如果我在调用JVM时多次指定系统属性,那么当我检索属性时,我将实际得到哪个值? e.g。

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

当我致电System.getProperty("prop");时会有什么结果?

这方面的Java documentation并没有真正告诉我这方面有什么用处。

在我对运行不同JVM的几台机器进行的非科学测试中,似乎最后一个值是返回的值(这实际上是我需要的行为)但是我想知道这种行为是否实际上是在任何地方正式定义的还是可以的JVM之间有所不同吗?

3 个答案:

答案 0 :(得分:15)

没有什么能像写一个小班来看它是如何运作的。

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)

答案 1 :(得分:7)

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

答案 2 :(得分:0)

我不确定是否有针对Oracle的文档。

根据IBM JRE documents

命令行上Java选项的顺序定义了启动期间哪些选项优先。最右边的选项优先于最左边的选项。