我编写了这段代码,尝试制作一个有地图的对象。
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引用相同的对象?
答案 0 :(得分:4)
MyMap
是static
,这意味着它与MyClass
的每个实例中使用的对象相同。如果您删除static
修饰符,则每个实例都会获得自己的Map
。
答案 1 :(得分:0)
静态变量将与类关联,而不与对象引用关联。 因此,无论您创建的对象数量是多少,您将只拥有一个静态变量副本。
将地图指向不同的引用,您必须将其从静态变为实例变量