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

2022-09-01 23:25:29

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

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

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

关于这一点的Java文档并没有真正告诉我在这方面有什么用处。

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


答案 1

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

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)

答案 2

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


推荐