JAVA的值传递

JAVA的值传递

之前总是觉得基本数据类型是值传递,引用数据类型是地址传递。应该会有很多和我有一样想法的小伙伴,其实不然;

不管是什么数据类型,都是用的值传递;画了一个大概的流程图

在这里插入图片描述

user1为实参,指向堆空间的一个user对象。当进行传递的时候,会copy一个新的变量副本user2。那么user2就是我们的形参,指向的也是同一个堆中的user对象。这也就是为什么我们在调用方法内修改了user对象的属性值,user1指向的对象也会受到影响;

百度百科发现:值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

为什么会说不会影响到实参呢,但是我们会发现我们操作之后会影响到实参;

这就是这里面的最大的一个误区。我们从始至终修改的就是user2(形参)中的属性!而不是修改的user2本身。而user2中的属性并不是形参。真正的形参是user本身;如果我们在方法中,让user2 = null;就会发现这种是不会影响到实参user1的。也就证明了确实值传递,形参的改变不会影响到实参。

之前是对对象的维度有一定的误解。现在终于豁然开朗。故记录下来,希望看到的人也能和我可以彻底明白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值