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

问题描述 投票:19回答:2

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

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

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

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

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

java jvm system-properties
2个回答
7
投票

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


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)
© www.soinside.com 2019 - 2024. All rights reserved.