mrlin1
2016-11-30 12:59
采纳率: 100%
浏览 2.3k
已采纳

JAVA 交换两个对象,这么写为什么没交换成功?

JAVA 创建了一个方法,交换2个对象。这么写为什么没成功交换?

employee 是我创建的一个类来的,getXXX方法是employee里的方法。

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Employee a = new Employee("a", 1000, 1990, 1, 1);
        Employee b = new Employee("b", 2000, 2000, 12, 12);
        System.out.println("a:" + a.getName());
        System.out.println("b:" + b.getName());
        swap(a, b);
        System.out.println("a:" + a.getName());
        System.out.println("b:" + b.getName());
    }

    public static void swap(Employee x, Employee y) {
        Employee temp = x;
        x = y;
        y = temp;
        System.out.println("x:" + x.getName());
        System.out.println("y:" + y.getName());
    }

图片说明
大概知道,是因为方法调用的是对象的拷贝?
那拷贝为什么没返回给对象本身?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 毕小宝 2016-11-30 13:04
    已采纳
    你是在方法调用中进行的交换,交换的是形参,而原始实际参数的指针依然是原来的引用。但是如果你操作对象的属性,直接设置两个对象的属性值交换,那么原来的对象的属性也就跟着变了,因为引用的是同一个地址。
    
    已采纳该答案
    打赏 评论
  • 蔡瑞圣 2016-11-30 13:16

    交换的是只是形参 这一块自己好好研究一下 很基础的东西

    打赏 评论
  • 石妖 2016-12-01 06:11

    java中只有值的传递,也就是说对于基本类型传递的就是基本类型本身,而对象传递的则是对于该对象的引用,所以swap方法只是将x,y的引用对调了一下,并没有改变引用本身所对应的内存地址的值。LZ还是自己看看java基础的东西吧

    打赏 评论
  • 囧兔2016 2016-12-01 06:14

    没事,这种问题等你工作几年,回头想想可能还是得楞一会!

    打赏 评论
  • weiping_29 2016-12-01 09:03

    这样赋值是引用,可以把对象读到流当中再写出到对象,这时候就可以成功交换

    打赏 评论

相关推荐 更多相似问题