java中 引用传递_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...

是时候展现一下我的JAVA基础知识了,2333。

我按照执行顺序给你写注释好了。

Person p1 = new Person(10);

//创建了一个对象

//p1.age=10;

modify(p1);

//modify函数传参,创建了一个在modify函数里面的局部变量p

//你应该明白p是一个新的变量,这里类似于执行了p=p1,这两个是指向的同一个对象的

//p.age=10;

p = new Person(20);

//注意,这里!这里!

//这里是p被重新赋值了,p指向了新的对象new Person(20);

//p.age=20;

//和p1指向的那个对象一毛线关系都没有啊

所以,你的代码是在函数内部,把局部变量给重新赋值了。

是没法修改到外面的对象的,因为你已经把唯一能访问到外面那个p1的p给重新赋值了!

public static void modify(Person p){

p.age=20; //只有这样才能修改对象!

}

同理,如果你写成这样:

public static void modify(Person p){

p = null;//对外面的p1没有任何影响

}

我举个例子,你就比较好理解了。

你创建了一个100000000个元素的数组,比如就叫p1,你把数组通过参数传进函数里面,那么:

这个参数p(类似于p = p1),p和p1他们是指向同一个对象。

不是说modify(int[] p)重新创建了100000000个元素的数组。

这个应该很好理解。

那么:

然后你通过p的内置函数怎么操作p都行,都是操作的那100000000个元素的数组。

但是,你不能把p重新赋值啊。

重新赋值它就不是之前那个数组啦!

比如:

你重新p = new int[100000000],就创建了一个新的100000000个元素的数组啊。

你执行p = null,也只是销毁了这个引用,不让它指向100000000个元素的数组而已。

对外面p1的那个数组不会再有任何影响了。

看到答案里好多人对这个有误解额。。。

说不是一个对象的。

说不能在函数里改变参数指向的对象的。

说int是传值的。

说什么的都有,2333。

补充:

关于JAVA的函数传参数,你应该也听说过,所谓"基本数据类型是传递的值,其它都是传递的引用"。

个人理解是这样的。

你传递个Person的对象进去,你可以用SetAge()什么的修改这个对象。

但是基本的数据类型,比如Integer、String等等,他们没有什么内置函数能改变他们自己。

所以,你传递进去一个int的参数,就算其实是传递的引用,你也只能对int做重新赋值,一重新赋值,就表现成传递的是"值"(永远影响不到函数外面)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值