有关java中的函数参数问题

参照文章:
https://www.cnblogs.com/hpyg/p/8005599.html
https://www.cnblogs.com/jiangxin007/p/9076696.html

最近在刷 leetcode 的一个回溯问题时需要同时使用 intList 来作为函数参数进行递归操作,碰见了一个问题就是 list 需要进行回溯操作,而 int 却不需要,对此很困惑。查询了资料才发现 int 值作为参数不会改变原值,而 list 是引用类型,每次进行修改都影响到了内存中的原值。具体为以下规则。
leetcode原题:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/

1.基本类型(int、short、float、double、long、boolean、byte、char)作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。
2、引用类型(包括数组,对象以及接口)作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数,函数体中改变参数会改变原值。
3、注意:String 以及8个基本数据类型的包装类Integer、Short、Float、Double、Long、Boolean、Byte、Character虽然是引用类型,但它们在作为参数传递时,也和基本数据类型一样,类似于值传递原值不改变。(其实是新创建了对象,具体查看参考文章第二篇)

大学时候在写C语言的时候,可以通过操作指针将常量的地址传入函数,而java中无法显式的去定义指针操作,就应该符合上述规则。在使用参数时,对于引用类型,修改其值就会使得内存中的值修改,而基本类型以及列举的几种特殊情况,修改值不会影响到内存中的原值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值