首頁>Club>
為什麼exp方法改變不了a1,但是chang能改變
6
回覆列表
  • 1 # 趙黑臉

    首先,個人覺得如果想得到更優質的答案,建議上專門的網站或者論壇求助。

    其實程式碼中的兩個方法的引數a,在方法被呼叫時賦值為陣列a1所在記憶體中地址的首地址。在方法被呼叫後a和a1指向同一塊地址。因此,change方法中對引數a所做的修改等同於直接對a1進行修改。而expand方法中是對引數進行了重新賦值,賦值後a的值變為newArray在記憶體中的首地址值,此時已經與a1無關。

    如果我沒說清楚,可以提出你的疑問,進一步探討。

  • 2 # 哥是個傳說

    java陣列作為引數傳遞,涉及到java中的值傳遞和引用傳遞。

    expand方法中新建了一個新的陣列newArray,透過arraycopy方法,把陣列引數a的值複製到陣列newArray,然後採用“=”重新把陣列newArray賦給陣列a,此時是把陣列newArray的引用地址賦給了陣列a,使得陣列a指向了陣列newArray的值,改變的是引用地址,而不是改變陣列a的值,此時陣列a和原陣列a1是沒有什麼關係的,這是一種引用傳遞。

    change方法是修改陣列引數a中的值,而陣列a引用地址指向的值和原陣列a1是一樣的。故修改陣列a的值就相當於修改陣列a1的值,是屬於值傳遞。

  • 3 # 孫大聲

    其實程式碼中的兩個方法的引數a,在方法被呼叫時賦值為陣列a1所在記憶體中地址的首地址。在方法被呼叫後a和a1指向同一塊地址。因此,change方法中對引數a所做的修改等同於直接對a1進行修改。而expand方法中是對引數進行了重新賦值,賦值後a的值變為newArray在記憶體中的首地址值,此時已經與a1無關。

  • 4 # Eʟɪᴀᴜᴋ-87

    系統學習的話推薦尚學堂這裡的師資力量還有教學質量都別的機構要好很多,這裡有java系統全系列學習班,java陣列作為引數傳遞,涉及到java中的值傳遞和引用傳遞。

    expand方法中新建了一個新的陣列newArray,透過arraycopy方法,把陣列引數a的值複製到陣列newArray,然後採用“=”重新把陣列newArray賦給陣列a,此時是把陣列newArray的引用地址賦給了陣列a,使得陣列a指向了陣列newArray的值,改變的是引用地址,而不是改變陣列a的值,此時陣列a和原陣列a1是沒有什麼關係的,這是一種引用傳遞。

    change方法是修改陣列引數a中的值,而陣列a引用地址指向的值和原陣列a1是一樣的。故修改陣列a的值就相當於修改陣列a1的值,是屬於值傳遞。

  • 5 # 一顆認真的小樹

    同學如果需要可以加一下你QQ,我有專門的解決Java難題群都是一群大佬在群裡面相互幫忙的。有什麼問題都是可以隨時問的

  • 6 # 愛思坦雜燴鋪

    穿進去的只是一個原來陣列的管理者,透過那個管理者可以改變數組裡的值。函數里面給這個管理者賦值相當於讓這個管理者去管另外的東西,不管他管什麼,離開函式他就沒了。

  • 中秋節和大豐收的關聯?
  • 語文怎樣做積累?