繁体   English   中英

当您在方法内部更改引用时会发生什么? (7)

[英]What happens when you change a reference inside a method? (7)

当您在方法内部更改引用时会发生什么?

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

对象,引用类型假定是不可变的。

不是所有的人。 一些,但不是全部。 例如, String是不可变的,但StringBuilder不是。 所有数组都是可变的。

将nums设置为nums2时会发生什么情况。

nums变量被赋予一个新值,该值等于nums2的现有值。

这根本不会改变这些变量所引用的对象的状态。 它只是更改变量值本身。

想象变量是纸。 整数数组就像房子,变量的值就像写在纸上的地址。 这行:

nums = nums2 ;

...就像将一张纸上的内容复制到另一张纸上一样。 那不会改变地址恰好指向的房屋的内容,对吗?

现在, nums只是一个局部变量-因为它是一个参数。 这根本不会改变调用代码中的任何内容,因为在Java中,参数始终按值传递。 因此,您只需在方法结束之前设置局部变量值即可,仅此而已。 这将没有任何意义。

如果以上方法均无济于事,则需要提出更具体的问题。


1请注意,我并不是说引用必须是内存地址-类比中的“地址”一词很方便。

什么都没发生。 引用类型是按值传递的,因此nums是局部变量。 它不会影响方法外的任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM