我有使用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