「按值傳遞」術語歧義大,取決於如何理解程式運行。存在兩派截然不同見解:
- Java 一切按值傳遞:基本型別傳副本;參考傳參考副本。故「一切」皆按值。前提是參考確實被傳遞。Java 設計讓我們忽略參考存在,視同「物件」,方法呼叫時系統自動處理差異。
- Java 基本型別按值、物件按引用:參考只是物件「別名」,不考慮傳參考,直接說「傳物件」。因無本地物件副本,故物件非按值傳遞。Sun 保留
byvalue 關鍵字似支持此說,但無人知何時實現。
分歧根源在於對「參考」的不同解釋。本書避開此爭論——最重要的是理解:參考傳遞會導致呼叫端物件發生意外改變。