我有使用HashMap和泛型的Java代码如下一段:为什么Java的HashMap具有不同对象的不同行为?
import java.util.*;
import java.io.*;
public class Map{
static HashMap<Integer, Integer> imap;
static HashMap<Integer, Thing> tmap;
public static void main(String[] args){
imap = new HashMap<Integer, Integer>();
imap.put(0,0);
Integer i = imap.get(0);
i = i + 1;
System.out.println(imap.get(0));
tmap = new HashMap<Integer, Thing>();
tmap.put(0,new Thing(0));
Thing t = tmap.get(0);
t.a = t.a + 1;
System.out.println(tmap.get(0).a);
}
}
class Thing{
public int a;
public Thing(int n){
this.a = n;
}
}
打印出以下几点:
0
1
我希望它打印或者两者的人(如果我修改参考)或两个零(如果我正在修改值)。那么为什么对于从整数到整数的映射,从整数到事物的行为不同?
你的意思是说int不可变,还是Integer? – ohq 2011-03-13 22:47:32
如果我没有记错,两者(就像String一样)。 – 2011-03-13 22:51:09
实际上,如果对象是不可变的,那并不重要。如果你做了'X x = map.get(0); x = somethingElse;',如果'X'是不可变的,那并不重要。你正在重新分配一个局部变量,它不会改变原来的'x'中的任何东西。 – 2011-03-13 22:57:36