Java語言中沒有引用傳遞,只有值傳遞。到底對不對?

來源:互聯網
上載者:User

看java求職寶典,有一名這樣的話:Java語言中沒有引用傳遞,只有值傳遞。怎麼都覺得不對。上網查了下資料

 

在傳遞引用的時候其實是複製了一份引用傳進去的.
A a=new A();
test(a)
相當於
(A b=a;
test(b)
)

如果傳的是基礎資料型別 (Elementary Data Type),修改這個值並不會影響作為參數傳進來的那個變數,因為你修改的是方法的局部變數,是一個副本。
如果傳的是一個對象的引用,也是一樣的,也是一個副本,但是這個副本和作為參數傳進來的那個引用指向的是記憶體中的同一個對象,所以你通過這個副本也可以操作那個對象。但是如果你修改這個引用本身,比如讓他指向記憶體中的另外一個對象,原來作為參數傳進來的那個引用不會受到影響。

我覺得弄明白這些就行了,說值傳遞或引用傳遞都無所謂,但是說值傳遞更適合一些,這個值可以是引用也可以是基礎資料型別 (Elementary Data Type)。
                  
                                    --------- 引用他人的話

所有的調用都是按值傳遞這是沒錯的,因為呼叫堆疊的原理限定了我們只能將各種值壓入堆棧,而方法返回時,並不會將堆棧中的值再進行處理,而只是簡單的調整棧頂指標將原先壓入堆棧的值廢棄掉。所以,一切對壓棧而傳遞到方法體內的參數,方法內部所做的修改對外界都是無法看到的。那麼鑒於這種情況,為了將函數內部對參數的修改可以帶到函數外,各種語言做了不同的處理,C/C++中可以傳遞指標,而Java則預設傳遞對象的引用。如果樓主非要把方法調用時壓入堆棧的地址稱為值的話,其實也並非不可,只不過這種說法我覺得有點兒牽強了。

                                    --------- 引用他人的話

同意兩位的意見!謝謝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.