import java.util.*;
public class HashtableAdd3{
public static void main(String[] args){
Hashtable ht = new Hashtable();
StringBuffer sb = new StringBuffer();
sb.append("abc,");
ht.put("1",sb);
sb.append("def,");
ht.put("2",sb);
sb.append("mno,");
ht.put("3",sb);
sb.append("xyz.");
ht.put("4",sb);
int numObj=0;
Enumeration it = ht.elements();
while(it.hasMoreElements()){
System.out.print("get StringBufffer "+(++numObj)+" from Hashtable: ");
System.out.println(it.nextElement());
}
}
}
//你认为输出的结果会是什么样的呢??????????????????
//如果你认为输出的是 abc abc,sb ········
/*那么你就要回过头再仔细看一看上一个问题了,把对象时作为入口参数传给函数,实质上是传递了对象的引用,
* 向Hashtable传递 StringBuffer对象也是只传递了这个StringBuffer对象的引用!
* 每一次向Hashtable表中put一次 StringBuffer,并没有生成新的StringBuffer对象,
* 只是在Hashtable表中又放入了一个指向同一StringBuffer对 象的引用而已。
*/
/*
对Hashtable表存储的任何一个StringBuffer对象(更确切的说应该是对象的引用)的改动,
实际上都是对同一个 "StringBuffer"的改动。所以Hashtable并不能真正存储能对象,
而只能存储对象的引用。也应该知道这条原则对与Hashtable相 似的Vector, List, Map, Set等都是一样的。
上面的例程的实际输出的结果是:
*/
/* RUN RESULT
get StringBufffer 1 from Hashtable: abc,def,mno,xyz.
get StringBufffer 2 from Hashtable: abc,def,mno,xyz.
get StringBufffer 3 from Hashtable: abc,def,mno,xyz.
get StringBufffer 4 from Hashtable: abc,def,mno,xyz.
*/
Hashtable
最新推荐文章于 2024-06-22 17:30:23 发布