java 函数 引用参数传递_Java函数参数是拷贝传递还是引用传递

初学Java遇到一个诧异的问题,Java函数的对象参数到底是拷贝传递还是引用传递,为了验证这个问题,写了以下的一个测试类:

class Employee

{

private String name;

public Employee(String s)

{

name = s;

}

public void setName(String s)

{

name = s;

}

public String getName()

{

return name;

}

}

然后编写调用的主函数:

class testValue

{

public static void main(String[] args)

{

Employee a = new Employee("Alice");

Employee b = new Employee("Sam");

Employee c = new Employee("Coca");

swap(a, b);

System.out.println(a.getName());

System.out.println(b.getName());

c = a;

a = b;

b = c;

System.out.println(a.getName());

System.out.println(b.getName());

changeValue(a);

System.out.println(a.getName());

}

public static void swap(Employee x, Employee y)

{

Employee temp = x;

x = y;

y = temp;

}

public static void changeValue(Employee x)

{

x.setName("HH");

}

}

于是,神奇的事情发生了,以下是打印结果:

vilarsail@OptiPlex-9020:~/test$ java testValue

Alice

Sam

Sam

Alice

HH

由于以前C++思想比较重,所以想到:如果是引用传递的方式,那swap()以后应该是交换了的,但是打印的结果却没有交换,如果是拷贝的方式新生成一个对象,那么在调用changeValue()的时候就当然不会影响原先变量的值,但是事实却是改变了。。。偶槽。。。

查了许多资料以后得出结论,Java的确是拷贝方式传递参数的,然而,此拷贝却跟C++有本质的不同,C++拷贝时候会新建一个对象,成立新的数据块,但是Java却是更类似于C++的指针传递,在传递参数时候相当于拷贝了一个地址指针,因此,在swap()函数里面更改x变量指针指向的对象不会影响到原先的a变量,在changeValue()中由于a和x指向的是同一个对象因此a指向的私有数据的变化当然会影响到x。

哈哈哈,苦逼的C++转Java程序猿~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值