题目:
测试类:
public class Test {
public void calc1(int num){
num=num+1;
}
public void calc2(Student student){
student.age=student.age+1;
}
Test test=new Test();
int n=8;
test.calc1(n);
Student stu=new Student();
stu.age=18;
test.calc2(stu);
System.out.println(n+"---"+stu.age);
}
学生类:
public class Student {
Integer age;
}
猜一下最后输出的System.out.println(n+"---"+stu.age);的值为多少
答案是8----------19
为什么呢?
这是因为基本数据类型和引用数据类型传参方式的不同
基本数据类型参数传递:浅拷贝
基本数据类型的参数传递,传的是值,新的变量会在内存空间中再开辟一块地方来存储
基本数据类型存储在栈中
n=8会在栈中开辟一块空间存储8
当传入方法时,num接收的是n的值8,num+1和n没有任何关系,会在栈中开辟一块空间存储9,这就是浅拷贝
引用数据类型参数传递:深拷贝
引用数据类型在内存中存储先在栈中开辟一块空间,指向在堆中存的值
引用数据类型的参数传递时,传递的是地址,stu对象将自己的地址传给了student这个方法中的对象,所以当student对象的age属性+1时,stu的age属性也会相应改变,这就叫深拷贝