Java是值传递还是引用传递
作者:网络转载 发布时间:[ 2016/5/13 11:24:04 ] 推荐标签:测试开发技术 Java
首先写一个简便的Employee,以便测试使用。
class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后写一个函数,传入一个Emplyee对象,修改name,如果函数执行完毕原来的employee的name值发生变化,按照我们的理解,会认为是引用传递。
public static void main(String[] args) {
Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
changeName(a);
System.out.println(a.getName());
System.out.println(b.getName());
}
public static void changeName(Employee x) {
x.setName("fly");
}
执行结果:
fly
Bob
但是还有一个测试用例,交换两个对象。如果是引用传递,函数执行结束后,两个对象的名字会发生交换。现在来试一下。
public static void main(String[] args) {
Employee a = new Employee("Alice");
Employee b = new Employee("Bob");
swap(a, b);
System.out.println(a.getName());
System.out.println(b.getName());
}
public static void swap(Employee x, Employee y)
{
Employee t = x;
x = y;
y = t;
}
执行结果:
Alice
Bob
然而他们并没有发生任何变化。什么情况?!又变成值传递了吗?
后的答案确实是值传递。第一个例子中让大家感觉是引用传递的原因是:传入函数的值是对象引用的拷贝。(用c语言的说法是指针的拷贝,也是说地址的拷贝。)
这个时候我们再写后一个例子,在swap函数里修改x的name值。
public static void swap(Employee x, Employee y)
{
Employee t = x;
x = y;
y = t;
x.setName("joyce");
}
执行结果:
Alice
joyce
看,x交换后的引用是b的,所以修改x后,b会发生变化。第二次因为没有发生修改,函数结束后什么都没了,毕竟只是引用的拷贝嘛~
java是值传递,值是对象引用的拷贝。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11