搗漿糊的老話題:Java是按值傳遞還是按引用傳遞
但是一位IBM專家,就在“傳遞的引用的複製”上作了語義文章,最後得出“Java是按值傳遞的”。引起了很大的混亂。
看他的文章翻譯:
http://www.zdnet.com.cn/developer/code/story/0,2000081534,39049790,00.htm
文章中,專家認為是按值傳遞,譯者 cherami (好像是Java研究組織的)畫蛇添足,又否定了IBM專家的觀點,最後導致這篇文章給人非常混亂的感受,國內譯者應該養成良好的職業道德,翻譯文章應該有原文網址。
所以建議大家最好不要去看“破除java神話之二”這篇文章,ZDNet China的炒飯看來炒的是漿糊飯,漿糊,你看了這篇文章別生氣,不是在說你,看來我自己也陷入混亂了。
這位IBM專家後來又出一篇文章來繼續堅持自己的“按值傳遞”的觀點。
http://www.mhdn.net/p/2002-10-07/6044.html
很多人指責這位專家:混淆概念,這位專家進行了狡辯,他說:“
我必須承認,在我第一次認識到 Java 應用程式按值傳遞所有引數時,我也曾表示懷疑。我曾一直假定因為 Java 應用程式有兩種型別,所以他們按值傳遞基本型別而按引用傳遞引用,就像 C++ 那樣。在轉向 Java 程式設計之前我已用 C++ 程式設計好幾年了,感覺任何其他事情似乎都不直觀。但是,一旦我理解了發生的事情,我就相信 Java 語言按值傳遞所有引數的方法更加直觀。
”
我從他這句話中看不出什麼東西來。
最後,這篇文章:
http://outinn.myetang.com/tip/rorv.htm
原文:
又給混亂新增了一層,文章認為,按值傳遞和按引用傳遞都可能發生,“簡單型別是按值傳遞的,物件是按值傳遞也是按引用傳遞,只是參照物不同,結果也就不同”。但是文章舉例的String和Stringbuff解釋得非常混亂,無法用自己的理論來自原其說。
看來,只能研究一下IBM專家的原文了:
http://www-106.ibm.com/developerworks/java/library/j-passbyval/
最後發現,混亂的原因是大家對““Java是按值傳遞的”中的"值"的概念定義不一樣,對於原始型別,這個值就是資料本身,而在物件中的“值”就不是物件本身。
IBM專家在不同場合偷換了"值"的概念。
讓我們還是記住這樣比較清楚,容易操作的概念:
Java對原始型別是按值傳遞 對於物件傳遞的是引用的複製。
相關文章
- JS是按值傳遞還是按引用傳遞?JS
- Java - 是值傳遞還是引用傳遞Java
- 你會swap嗎,按值傳遞還是按引用?
- 解惑4:java是值傳遞還是引用傳遞Java
- Java引數傳遞是傳值還是傳引用?Java
- 偽命題:Java傳遞的值還是引用?Java
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- 按值傳遞
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Go語言引數傳遞是傳值還是傳引用Go
- javasript 按值傳遞Java
- Java的值傳遞和引用傳遞Java
- go語言引數傳遞到底是傳值還是傳引用Go
- JS的方法引數傳遞(按值傳遞)JS
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- Java中的值傳遞和引用傳遞Java
- JavaScript之按值傳遞JavaScript
- 188W+程式設計師關注過的問題:Java到底是值傳遞還是引用傳遞?程式設計師Java
- Java 是傳值還是傳引用 (轉)Java
- VB.NET 對於型別的傳遞按值或者按引用型別
- (求教)關於js函式按值、引用傳遞的問題JS函式
- 值傳遞與引用傳遞
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- chan中傳遞map資料,傳遞的是引用
- java方法中只有值傳遞,沒有引用傳遞Java
- 一切皆按值傳遞
- java經典問題:傳值還是傳引用(轉)Java
- 快速搞懂值傳遞與引用傳遞
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- Day30--值傳遞和引用傳遞
- JavaScript深入之引數按值傳遞JavaScript
- JavaScript 深入之引數按值傳遞JavaScript
- 引數傳遞方式必須是const引用傳遞
- Java 應用程式中的按值傳遞語義 (轉)Java