再谈值传递和引用传递

java中只有值传递,
基本类型:值直接保存在变量中
引用类型:变量中保存的是对象的地址

从第一次接触这个问题到现在,知乎两个回答已经看的好几遍了,但是没有真正的理解,所以才会重复的看很多遍,今天刷到剑指第36题的时候,又遇到了这个问题,所以要一次性把这个问题搞懂:

这个是第一次的写法:
在这里插入图片描述

这个是第二次的写法:
在这里插入图片描述

其实就想是想在递归的时候直接给参数赋值,但是第一种方法两个局部变量一直返回的是null,最后改成全局变量就是可以的,第一种方法时不行的,明显是值传递和引用传递没有搞清楚才产生的问题。

先说结论:

  • 基本类型:大家都知道不会被改变

  • 引用类型:

  • 如果直接对形参有 = 的操作,那么是不会改变的,我们这的第一个方法就犯了这个错误,直接对head形参进行 = 操作。(如果是引用传递,这里是会直接改变的,所以在C中按第一种方法写是没有任何问题的)

  • 如果对形参的变量有进一步操作,这样就是改变的。我们之前做链表的题,就是堆node.next = ,像这类操作。

所以现在我们再来看一下概念:

  • 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

注意是对参数的修改,和对参数的属性的修改是完全两个概念,引用hollis中回答的比喻:前者就是在复制的钥匙上打磨,做修改。而后者就相当于用复制的钥匙进到你的房间,对你的房间做修改!!!

以上,具体参考:
(6 封私信 / 28 条消息) Java 到底是值传递还是引用传递? - 知乎 (zhihu.com) 具体参考的hollis的回答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值