为什么说Java是值传递

为什么说Java是值传递?

值传递和引用传递的区别

值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递:是指在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数
在这里插入图片描述

Java中的基本数据类型是值传递

在这里插入图片描述
只是将实际参数复制一份传递给形参,在函数中对参数进行修改不会影响到实际参数的值

Java中的引用数据类型也是值传递在这里插入图片描述

在上面参数传递的过程中,实际参数的地址0x123456被拷贝给了形参,在函数中,并没有对形参本身进行修改,而是修改形参持有地址中存储的内容。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d2614346bd1648129abdfc043ac3b235.png
在这里插入图片描述

接下来举个例子:
![在这里插入图片描述](https://img-blog.csdnimg.cn/4095d16f741f48049c5ce20cbb3eb7fd.png在这里插入图片描述
解释一下:
在main中创建一个user对象的时候,在堆中开辟一块内存,带有name和age属性,user也持有该地址0x123456

在调用function函数的时候,将user作为实际参数传递给形参xingCan中,会把这地址0x123456交给xingCan,这是xingCan也指向这个地址

在fuction函数内部对参数进行了修改,xingCan = new User(); 在内存中会重新开辟一块空间0x456789赋值给xingCan,后面对形参的任何操作都不会影响0x123456改地址的对象
在这里插入图片描述

我们先来看Test2该类的例子:
实参是一个对象,形参又通过new创建了一个新的对象,因此实参和形参不是同一个参数
通过打印出来的结果来看,实参也没有被改变,因此引用数据类型不是一个引用传递

画图来理解一下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值