Если я задаю свойство System несколько раз при вызове JVM, какое значение используется? - программирование
Подтвердить что ты не робот

Если я задаю свойство System несколько раз при вызове JVM, какое значение используется?

Если я укажу системное свойство несколько раз при вызове JVM, какое значение я получу при получении свойства? например.

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

Каким будет результат при вызове System.getProperty("prop");?

Java-документация на этом не говорит мне ничего полезного на этом фронте.

В моем ненаучном тестировании на нескольких машинах, работающих с разными JVM, кажется, что последнее значение возвращает тот, который мне нужен, но я задавался вопросом, действительно ли это поведение официально определено где угодно или может различаются между JVM?

4b9b3361

Ответ 1

Класс java.util.System поддерживается классом Properties, который является просто расширением Hashtable. Предполагая, что значения считываются по порядку при передаче в качестве аргументов в JVM, последним назначенным значением будет окончательное значение.

Ответ 2

Нет ничего лучше написания небольшого класса, чтобы посмотреть, как это работает.

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)