问题很简单,假设两个对象User,user里就一个name属性,写一个方法void swap(User u1,User u2),调用后如何让u1和u2交换?网上有很多种说法,都不对啊,到底怎样才能实现啊

解决方案 »

  1.   

    也不是两个对象进行交换,而是把它们的name属性进行交换。
      

  2.   

    void swap(User u1,User u2) {
    String temp = null;
    temp = u1.name ;
    u1.name = u2.name; 
    u2.name = temp;
    }
      

  3.   

    java可能做不到吧,可能java认为不需要这么做。
    C#提供了ref 和 out 关键字,可以实现这个功能。
    如果用C的思路来理解u1和u2是两个指针
    在函数里,你可以改变u1和u2所指向的内容,
    但这两个指针本身的值却不能改变,
    要想改变,你就得把指针本身的地址传过去
    java好像没有提供这样的语法。
      

  4.   

    void swap(User u1,User u2)这里面传的其实就是对象的引用。你要的效果就是u1指向以前的u2指向的对象,u2指向以前的u1指向的对象.
    void swap(User u1,User u2) {
        User temp = null;
        temp = u1;
        u1= u2; 
        u2= temp;
    }
    这样不就可以了么?其实就是把引用互换一下。没有必要硬要去替换heap中的对象了吧?
      

  5.   

    void swap(User u1,User u2) {
        User temp = null;
        temp = u1;
        u1= u2; 
        u2= temp;
    }
    这样交换,两个对象的name还是没有交换的  分析下内存试下
    如果通过对象的引用去交换name字段,倒是交换了
      

  6.   

    类不能直接交换,没有指针的概念在java里,还是做成交换类的属性吧,答案大家都给出了
      

  7.   

    swap(User u1,User u2) 是无法实现的,因为 Java 是传值的,所以这个方法并不会改变 u1 和 u2 两个变量的值(即它们的引用)。
      

  8.   

    楼主的想法在 java 中是做不到的void swap(User user1, User user2) {
    ......
    }User u1 = ......
    User u2 = ......swap(u1, u2);后来方法被调用时,传进来的是原有引用的一个拷贝而已比如说,变量u1和u2分别是两张名片,上面记录了两个 User 对象的地址调用swap时,并没有直接把 u1 和 u2 传到方法中去,而是另外找了两张空白的卡片,把u1和u2上的两个 User 对象的地址抄写到这两张空白卡片上,然后送到 swap 方法内部。当然,在swap方法内部,这两张卡片的内容还是发生了交换,但是 u1 和 u2 还是老样子
      

  9.   

    迄今为止觉得 C 唯一比java好的地方就是有个指针,楼主说的是指针的特权,所以.....
      

  10.   

    要是不知道类里面有什么属性要交换他们的指向!JAVA可以做到吗?!
      

  11.   

    看一下java中的方法的参数传递的方式就可以了    许多人说是按引用传递的  但其实是按值传递的
      

  12.   

    Java中除了基本数据类型,其它的都是对象,在方法中传递的是对象引用的拷贝,在方法内可以改变对象的值,但改变对象引用的拷贝对方法外的对象引用不起作用
      

  13.   

    用void应该不行吧,必须要return回去才能真的进行交换吧
      

  14.   

    org.apache.commons.beanutils.BeanUtilscopyProperties(Object dest, Object orig) 
              Copy property values from the origin bean to the destination bean for all cases where the property names are the same.
      

  15.   

    36楼通过BeanUtils来拷贝对象可以借鉴,其实原理就是遍历属性然后赋值。对楼主的问题:
    在java的方法里面,如果交换引用,方法结束后这种交换就失去了作用。
    但是,如果交换的是对象里的属性值,方法结束后引用虽然失去了作用,但是对象内的属性值已经改变
      

  16.   

    String a=user1.name;
    user1.name=user2.name;
    user2.name=a;
      

  17.   

    void swap(User u1,User u2){
       User u=null;
       u=u1;
       u1=u2;
       u2=u;
    }改变了引用所指向的对象
      

  18.   

    昨天翻了一下java核心技术,上面有讲到,的确不能交换