簡體   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