我的理解:
    Hashtable hashTemp = new Hashtable();//分配了新的地址而原来hashIn的地址内容并没有变化,
改成
    Hashtable hashTemp =hashIn;
    hashTemp.clear(); //new Hashtable();    hashTemp.put("1","x1");
    hashTemp.put("2","x2");
    hashTemp.put("3","x3");
    hashIn = hashTemp;
试一下,看看内容变不变

解决方案 »

  1.   

    对不起,没有这句
    hashIn = hashTemp;改后的意思就是将hashIn的一个引用给了hashTemp
    然后改变了其内容
      

  2.   

    hashTable.put()方法中 如果关键字相同后面的值将覆盖原来的值
    但是其返回原来的值
    要先remove在put
      

  3.   

    sorry
    错了
    重要的是在你用方法public void setHasValue(Hashtable hashIn)时此参数是值传递当你赋值时hashIn = hashTemp只是传递原来setHasValue(hasInit);中hasInit的副本而没改变原来hasInit这样就可以import java.util.*;public class TestUTILHT001{  private int iReturn = 0;  public TestUTILHT001() {
      }  public static void main(String args[]){    Hashtable hasInit = new Hashtable();
         
    TestUTILHT001 t = new TestUTILHT001();
        hasInit.put("1","1");
        hasInit.put("2","2");
        hasInit.put("3","3");    System.out.println("The..... hashtable init value is :");
        System.out.println(hasInit);
     Hashtable hashTemp = new Hashtable();    hashTemp.put("1","x1");
        hashTemp.put("2","x2");
        hashTemp.put("3","x3");
        hasInit =(Hashtable) hashTemp;
        //TestUTILHT001.setHasValue(hasInit);    System.out.println("Thefffffffffffffffffs hashtable finally value is :");
        System.out.println(hasInit);    //return this.iReturn;
      }  /*public static void setHasValue(Hashtable hashIn){    System.out.println("In Method , The value of Init Hashtable : ");
        System.out.println( hashIn);    Hashtable hashTemp = new Hashtable();    hashTemp.put("1","x1");
        hashTemp.put("2","x2");
        hashTemp.put("3","x3");
        hashIn =(Hashtable) hashTemp;    System.out.println("In/////????/ Method , The sawp value of Hashtable : ");
        System.out.println( hashIn);  }*/}
      

  4.   

    to xhp999(泡泡):
       “你用方法public void setHasValue(Hashtable hashIn)时此参数是值传递当你赋值时hashIn = hashTemp只是传递原来setHasValue(hasInit);中hasInit的副本“
        我传递的是 Hashtable ,应该是传地址的,怎么会是传递hasInit的副本呢? 那不变成了传值了吗? 
        请指教!!!
      

  5.   

    晕,根本没人理我,不要修改你的参数!!!!!这里传递的是reference但是方法里面得到的是这个reference的副本(泡泡的说法是错的,java里面基本数据类型才是值传递,但是java保留了passbyvalue关键字,c++缺省才是传值)你如果是直接通过参数传来的reference修改hashtable的内容,就会得到你想要的结果,因为referernce值得是同一块内存区。但是,现在你的做法是让你得到的reference(就是我说的参数reference副本)指向了另外的一段内存区。(你new了一个hashtabletemp)这样退出方法后这个副本将被毁灭。你并没有操作到参数内存。不知道我说得明白了没有。再次说一下,不要试图在你的方法里面修改你的参数!!!!
      

  6.   

    to bluesmile979(笑着):
       谢谢! 清楚了! 
       接分吧!虽然少了点!
      

  7.   

    java只有传值调用,这和C是一样的