Java高手之路——基本数据类型和引用数据类型的参数传递(浅拷贝和深拷贝)

题目:

测试类:

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属性也会相应改变,这就叫深拷贝

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值