更改方法中的引用会发生什么?
public void reverseX(int[] nums) {
int[] nums2 = new int[nums.length] ;
for( int i=0 ; i < nums.length ; i++ )
nums2[i] = nums[nums.length-(i+1)] ;
nums = nums2 ;
};
编译好。
代码来自此处,并显示为不应执行的操作的示例。
http://www.cs.nyu.edu/~cconway/teaching/cs1007/notes/arrays.pdf
答案 0 :(得分:4)
对象,引用类型被认为是不可变的。
不是全部。一些,但不是全部。例如,String
是不可变的,但StringBuilder
不是。所有数组都是可变的。
当nums设置为nums2时会发生什么。
nums
变量被赋予一个新值,该值等于nums2
的现有值。
这不会改变那些变量所引用的对象的状态。它只是改变变量值本身。
想象一下,变量就是纸片。整数数组就像一个房子,变量的值就像写在纸上的地址一样。这一行:
nums = nums2 ;
......就像将一张纸上写的东西复制到另一张纸上一样。这不会改变地址恰好引用的房子的内容,对吗?
现在nums
只是一个局部变量 - 因为它是一个参数。这根本不会改变调用代码中的任何内容,因为参数总是通过Java中的值传递。所以你要在方法结束之前设置一个局部变量值,这就是全部。它没有任何有意义的效果。
如果这些都不能帮助您,您需要提出更具体的问题。
1 请注意,我并不是说引用必须是内存地址 - “地址”这个词在类比中很方便。
答案 1 :(得分:3)
什么都没发生。引用类型按值传递,因此nums
是局部变量。它不会影响方法之外的任何内容。