又被引用传递参数坑了

虽然这个问题从我入门那一天起就知道了,可是很不幸的,刚刚刷题又陷进去了。

以Java为例做说明:

关于Java参数引用的说明

Java中只有值传递,不管是原始类型还是引用类型,传递的都是副本。

①如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值。 
②如果参数是对象名,即正文中所说的“对象引用”——Java中对象的变量名实际上代表的是对象在堆中的地址(专业术语叫对象引用),那么传来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果函数中没有改变这个副本的地址,而是改变了地址中的值,那么这个改变会影响传入的参数。如果在函数中改变了副本的地址,那么副本就指别地儿去了,原来传入的参数不会受到影响。

另外需要注意,不可变类型如果是采用引用传递,那么连里面的值也改变不了,因为是不可变参数嘛。

 

其实概念是很简单的概念,但是当刷题写代码的时候,很容易就忘记了。

比如说,现在写一个带备忘录的递归程序。那么,有两种做法,

  1. 第一种就是在递归方法外创建一个变量;
  2. 第二种就是用引用传递参数去维护这个变量;

第一种无论是修改引用本身,还是引用内容都没有问题。

但是第二种如果设计了修改引用本身就会失败,这个时候又专注于算法的设计,很容易找不到问题所在,当然,如果你能够调试的话肯定能很快定位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值