代码如下:
Hashtable ht=new Hashtable();
Vector v=new Vector();
v.addElement("abc");
v.addElement("def");
ht.put("a",v);
System.out.println(ht.get("a"));
v.clear();
v=null;
System.out.println(ht.get("a"));问题是当我把Vector清空以后,第二次调用System.out.println()语句时,就会打印[]空数据出来.我觉得这个与java里的引起传递有关,但我找不到好的解决方法,请大家帮帮帮忙.

解决方案 »

  1.   

    v.clear(); 
    v=null; 
      

  2.   

    楼主可能没有理解对象,有对象的引用
    ht.put()的时候,已经把对象放进去了了, v.clear()就把v中的数据清空了,v = null 只是说v这个变量不再指向那个对象,但对象本身还存在,还可以通过 ht.get("a")得到的你可以在第一个sysout之前ht.put之后,加上一 句,v.add("sdf");,第一次打出来的将有三个元素
      

  3.   

    3楼的朋友,在代码的最后一句,用ht.get("a")的时候,已经不可以打印出内容出了.我想要的就是在清空Vector的情况也,也能用ht.get("a")得到数据.
      

  4.   

    vector支持cloneable,复制一下就OK了Hashtable ht=new Hashtable();
    Vector v=new Vector();
    v.addElement("abc");
    v.addElement("def");
    Vector temp_v = (Vector)v.clone();
    ht.put("a",temp_v);

    System.out.println(ht.get("a"));
    v.clear();
    v=null;
    System.out.println(ht.get("a"));
      

  5.   

    HashMap 里面的那个Vector 就是被你 清空的那个这就是传引用,实际操作的是同一个对象
      

  6.   

    ht.put("a",v); 改为h.put("a",v.clone);
      

  7.   

    是啊,已经被你clear了,肯定没有内容,就一个[]
    你直接v =null;而不v.clear()就有内容了