23

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

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

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

Java 文档在这方面并没有真正告诉我任何有用的信息。

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

4

3 回答 3

16

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

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 bit

> 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)
于 2012-06-09T03:35:42.867 回答
8

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

于 2012-06-09T02:36:54.563 回答
2

我不确定是否有任何有关 Oracle 的文档。

根据IBM JRE 文件

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

于 2019-11-04T11:30:09.470 回答