0

マップを持つオブジェクトを作成しようとして、このコードを書きました。

public class MyClass {
    private static Map<String, List<String>> myMap;

    public MyClass() {
        myMap = new TreeMap<String, List<String>>();
    }
    public void putValueInMap() { //etc... }
    public void toString() { //etc...}
}

でも、2つ作ってみると、同じ物に見える!

public class Driver {
public static void main(String[] args) {
    System.out.println("Testing Constructor: ");
    MyClass nope = new MyClass();
    MyClass wut = new MyClass();

    System.out.println("nvl" + nope.toString());
    System.out.println("wut" + wut.toString());

    try {
        nvl.addValue("this is a", "test");
    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("****added this is a:test****");
    System.out.println("nope" + nvl.toString());
    System.out.println("wut" + wut.toString());

}

}

私が得ている出力は次のとおりです。

Testing Constructor: 
nope[]
wut[]
****added this is a:test****
nope[this is a:test]
wut[this is a:test]

nope と wut が同じオブジェクトを参照しているのはなぜですか?

4

2 に答える 2

4

MyMapですstatic。つまり、 のすべてのインスタンスで使用される同じオブジェクトですMyClass。修飾子を削除するとstatic、各インスタンスは独自の を取得しますMap

于 2013-09-07T01:44:56.953 に答える
0

静的変数は、オブジェクト参照ではなく、クラスに関連付けられます。したがって、作成するオブジェクトの数に関係なく、静的変数のコピーは 1 つだけになります。

マップを別の参照にポイントするには、静的変数からインスタンス変数に変更する必要があります

于 2013-09-07T01:55:45.123 に答える