java本身就是按引用调用的做法,但是像你上面的用一个函数来实现exchange的做法,在java里面是不行的,因为java里函数参数的传递是通过copy出一个新的参数类型的对象在stack上,你在函数里对参数的操作,是对新生成的对象引用进行操作。
其实,在java 里要实现两个对象值之间的互换,那实在是方法太多了,我这里提供一个思路,你可以将两个对象之间的值交换封装成一个类,(记住,java是完全面向对象的)如下所示:
class  Exchange 
{
Object first;
Object second;
public Exchange(Object first,Object second)
{
                  //这里可以对参数类型进行一些判断,比如需要两个参数类名一致等等 this.first=first;
this.second=second;
} public void exchange()
{
Object tmp=this.first;
this.first=this.second;
this.second=tmp;

} public static void main(String[] args) 
{

Exchange testexchange=new Exchange("aaaaaa","bbbbbb");
testexchange.exchange();
System.out.println("first:"+testexchange.first+";second:"+testexchange.second);

}
}

解决方案 »

  1.   

    java根本就不是call by reference的  而是call by name的如果想改变参数的值的话  基本类型是不行的   如果是对象 那么可以修改对象的状态但是不能让他指向新的对象  楼上的之所以输出结果好像是交换了 那是因为 并没有传递参而是直接修改了first second
      

  2.   

    赫赫,难道我的理解是错误的?在阐明我的理解吧(估计有误)
    我上面所举的例子正是为了避免参数传递,而是将他们封装到了一个类里面,因为参数传递是按值传递的(也就是copy出对象的一个副本,再在这些副本上进行操作),我得类封装的方法采用了java里的一般常用的按引用传递的做法,也就是this.first=this.second;这些只是在传递它们之间的引用而已,避免了值传递的副本问题。
      

  3.   

    javer6(孤舟万里) 的方法可行,但稍显繁琐,有没有更好的方法?没有就结贴了