Java:为什么两者都引用同一个对象?

时间:2013-09-07 01:43:42

标签: java reference

我编写了这段代码,尝试制作一个有地图的对象。

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...}
}

但是当我尝试制作两个物体时,它们似乎是同一个物体!

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引用相同的对象?

2 个答案:

答案 0 :(得分:4)

MyMapstatic,这意味着它与MyClass的每个实例中使用的对象相同。如果您删除static修饰符,则每个实例都会获得自己的Map

答案 1 :(得分:0)

静态变量将与类关联,而不与对象引用关联。 因此,无论您创建的对象数量是多少,您将只拥有一个静态变量副本。

将地图指向不同的引用,您必须将其从静态变为实例变量