天天看點

java 傳值與傳參

 作者:fbysss

msn:[email protected]  

blog:blog.csdn.net/fbysss

聲明:本文由fbysss原創,轉載請注明出處

關鍵字:java 傳值 傳引用

這是個老生常談的問題了,引起過無數争論,但可以說一直沒有一個令人滿意的回答。

有些人非要故弄玄虛,把傳引用說成是棧裡面放的是引用的值,說隻有傳值沒有傳引用,那看看這句經典名言吧:

o'reilly's java in a nutshell by david flanagan (see resources) puts it best: "java manipulates objects 'by reference,' but it passes object references to methods 'by value.'"

從這裡也可以看到,david 也沒那麼生硬,不過是看你從哪個角度來認識這個問題,如果大家習慣c++的那種傳參時的了解方式,為何不能這麼比較呢?

有人已經總結過:

參見

http://www.javaresearch.org/article/3156.htm

1、對象是按引用傳遞的

2、java 應用程式有且僅有的一種參數傳遞機制,即按值傳遞

3、按值傳遞意味着當将一個參數傳遞給一個函數時,函數接收的是原始值的一個副本

4、按引用傳遞意味着當将一個參數傳遞給一個函數時,函數接收的是原始值的記憶體位址,而不是值的副本

寫的沒錯,但是文字太多,第二條就已經把人弄糊塗了,得仔細看完4條才清楚。而且對string類型的疑惑沒有解決。

這麼簡單的事情,何必這麼繞呢?為啥沒人跟c++過不去,偏要跟java來勁?

三句話總結一下:

1.對象就是傳引用

2.原始類型就是傳值

3.string等immutable類型因為沒有提供自身修改的函數,每次操作都是新生成一個對象,是以要特殊對待。可以認為是傳值。

其他參考文章:

http://www-128.ibm.com/developerworks/cn/java/l-jpointer/index.html

http://dreamhead.blogbus.com/logs/2005/05/1189478.html

http://www.javaeye.com/topic/12961