调用函数是否会更新数组?Java数组传参后打印值疑问
数组参数传递后的修改效果解答
答案很明确——会打印2,调用arrayManipulate函数后原数组会被更新,完全不需要返回数组重新赋值。
为啥会这样?得从Java的参数传递机制说起:
- Java里数组属于引用类型,当你把数组作为参数传给方法时,传递的是数组对象引用的副本,但这个副本和原引用指向的是同一个内存中的数组对象。
- 你在
arrayManipulate方法里写的arr[0] = 2,是直接操作这个共享数组对象的元素,而不是改变参数引用本身。这种修改会直接反映到原数组上,因为它们指向的是同一个东西。
举个简单的类比:就像你和朋友各拿了一把能打开同一个柜子的钥匙,你用钥匙打开柜子把里面的东西换掉了,朋友再打开柜子看到的就是换后的东西——这里的钥匙就是引用,柜子就是数组对象。
补充个容易混淆的点:如果在方法里给参数arr重新赋值(比如写arr = new Someclass[5]),那这时候参数的引用就指向了新的数组对象,和原数组没关系了,这种情况才不会影响原数组。但你的代码里只是修改数组元素,所以完全生效。
内容的提问来源于stack exchange,提问作者user9770489
相关产品推荐
相关产品推荐

