1. 程式人生 > >java提高篇———值傳遞還是引用傳遞

java提高篇———值傳遞還是引用傳遞

java引用傳遞還是值傳遞的例子?

我想這個例子大家都明白,基本型別作為引數傳遞時,是傳遞值的拷貝,無論你怎麼改變這個拷貝,原值是不會改變的,輸出的結果證明了這一點:

Before change, n = 3

After changeData(n), n = 3

 

那麼,我們現在來看看物件作為引數傳遞的例子,這也是大家爭論的地方。


先看輸出結果:

Before change, sb = Hello

After changeData(n), sb = Hello World!

從結果來看,sb的值被改變了,那麼是不是可以說:物件作為引數傳遞時,是把物件的引用傳遞過去,如果引用在方法內被改變了,那麼原物件也跟著改變。從上面例子的輸出結果來看,這樣解釋是合理。

現在我們對上面的例子稍加改動一下:

按照上面例子的經驗:物件作為引數傳遞時,是把物件的引用傳遞過去,如果引用在方法內被改變了,那麼原物件也跟著改變。你會認為應該輸出:

Before change, sb = Hello

After changeData(n), sb = Hi World!

但執行一下這個程式,你會發現結果是這樣的:

Before change, sb = Hello

After changeData(n), sb = Hello

這就是讓人迷惑的地方,物件作為引數傳遞時,同樣是在方法內改變了物件的值,為什麼有的是改變了原物件的值,而有的並沒有改變原物件的值呢?這時候究竟是“傳值”還是“傳引用”呢?

Java中物件作為引數傳遞時,是把物件在記憶體中的地址拷貝了一份傳給了引數

if上面例子你都理解,return

else    請看連結:http://blog.csdn.net/WitsMakeMen/article/details/7319594

連結如果失效請拷貝連結至位址列!