23

JVM を呼び出すときにシステム プロパティを複数回指定した場合、プロパティを取得したときに実際に取得される値はどれですか? 例えば

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

を呼び出したときの結果はどうなりますSystem.getProperty("prop");か?

これに関するJavaのドキュメントは、この面で役立つことは何も教えてくれません。

異なる JVM を実行している 2 台のマシンでの非科学的なテストでは、最後の値が返されたように見えます (これは実際に私が必要とする動作です)。 ?

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ビット

> 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 クラスは、Hashtable の単なる拡張である Properties クラスによって支えられています。JVM に引数として渡すときに値が順番に読み取られると仮定すると、最後に割り当てられた値が最終的な値になります。

于 2012-06-09T02:36:54.563 に答える