你可以这样想:Java里的对象实际上是一个指针,参数传递的是地址,所以你修改指针指向的内容(obj->name)会保留下来。

解决方案 »

  1.   

    Java里的对象实际上是一个指针,参数传递的是地址?可书上说JAVA里只有按值传递,不存在按地址传递啊,我试了下面的程序,如果是对象是一个指针,那么下面的程序为什么不能改变对象状态啊?:public class  testswap
    {
    public static void main(String[] args)
    {
       username name1=new username("hnsoso1");
       username name2=new username("hnsoso2");
           swap(name1,name2);
       System.out.println("更改后name1的name为:"+name1.getName());
       System.out.println("更改后name2的name为:"+name2.getName());
    }
    public static void swap(Object x,Object y)
    {
      Object temp=x;
      x=y;
      y=temp;
    }
    }
     class username
    {
    public username(String n)
    {
      this.name=n;
    }
    public String getName()
    {
      return name;
    }
    private String name;
    };
    运行结果:
    更改后name1的name为:hnsoso1
    更改后name2的name为:hnsoso2
    结果没有达到预期目标--------------------
    糊涂了?????其实我还想知道方法中修改对象参数的状态是怎么实现的
      

  2.   

    既然你都说了,对象的引用是通过值传递的
    就上面的程序来说,如果你想达到换名的目的
    swap方法里面就不能应用两个对象,而是这两个对象的值--hnsoso1和hnsoso2
    也就是public void swap(Stirng s,String y)
      

  3.   

    我个人对上面的程序是这样看的:你传把NAME1,NAME2两个对象名做为参数调用了SWAP方法,那也是值传递,但SWAP的形参与调用SWAP方法的实参虽然是两个不同的参数,但两个对象的指向的属性地址是一样的,也就是说OBJECT X与NAME1里面的USERNAME1属性的地址是同一个,但OBJECT X与NAME1两个对象的地址却是分开的。所以这样你在SWAP方法体中交换了OBJECT X与OBJECT Y并不会对NAME1与NAME2产生影响。
      

  4.   

    对象引用是通过值来传递的方法不能修改基本类型(数字或布尔)的参数
    方法可以修改对象的参数状态
    方法不能让对象参数指向新的对象(所以swap方法没有达到预期目的)