Если я задаю свойство System несколько раз при вызове JVM, какое значение используется?
Если я укажу системное свойство несколько раз при вызове JVM, какое значение я получу при получении свойства? например.
java -Dprop=A -Dprop=B -jar my.jar
Каким будет результат при вызове System.getProperty("prop");
?
Java-документация на этом не говорит мне ничего полезного на этом фронте.
В моем ненаучном тестировании на нескольких машинах, работающих с разными JVM, кажется, что последнее значение возвращает тот, который мне нужен, но я задавался вопросом, действительно ли это поведение официально определено где угодно или может различаются между JVM?
Ответы
Ответ 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)