Java參數傳值?or傳引用?

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.'"html

從這裏也能夠看到,David 也沒那麼生硬,不過是看你從哪一個角度來認識這個問題,若是你們習慣c++的那種傳參時的理解方式,爲什麼不能這麼比較呢?java

有人已經總結過:c++

參見shell

一、對象是按引用傳遞的
二、Java 應用程序有且僅有的一種參數傳遞機制,即按值傳遞
三、按值傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的一個副本
四、按引用傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的內存地址,而不是值的副本
寫的沒錯,可是文字太多,第二條就已經把人弄糊塗了,得仔細看完4條才清楚。並且對String類型的疑惑沒有解決。函數

備註:對象傳遞時是引用傳遞,可是傳給函數的引用是一份拷貝的引用(也就是函數外有一份引用,函數裏有一份引用,兩份引用都會指向內存裏的對象),修改會直接改變對象的值,交換不會影響外部的引用。post

這麼簡單的事情,何須這麼繞呢?爲啥沒人跟c++過不去,偏要跟Java來勁?.net

三句話總結一下:htm

1.對象就是傳引用對象

2.原始類型就是傳值blog

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

相關文章
相關標籤/搜索