1、什麼是值傳遞,什麼是引用傳遞?
值傳遞(pass by value)是指在呼叫函式時將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。
引用傳遞(pass by reference)是指在呼叫函式時將實際引數的地址直接傳遞到函式中,那麼在函式中對引數所進行的修改,將影響到實際引數。
2、值傳遞和引用傳遞的區別是什麼?
3.Java的堆記憶體和棧記憶體
堆:主要用於儲存例項化的物件,陣列。由JVM動態分配記憶體空間。一個JVM只有一個堆記憶體,執行緒是可以共享資料的。
棧:主要用於儲存區域性變數和物件的引用變數,每個執行緒都會有一個獨立的棧空間,所以執行緒之間是不共享資料的。
4.Java中只有值傳遞
錯誤理解一:值傳遞和引用傳遞,區分的條件是傳遞的內容,如果是個值,就是值傳遞。如果是個引用,就是引用傳遞
錯誤理解二:Java是引用傳遞。
錯誤理解三:傳遞的引數如果是普通型別,那就是值傳遞,如果是物件,那就是引用傳遞。
無論是值傳遞還是引用傳遞,其實都是一種求值策略(Evaluation strategy)。在求值策略中,還有一種叫做按共享傳遞(call by sharing)。其實Java中的引數傳遞嚴格意義上說應該是按共享傳遞。
按共享傳遞,是指在呼叫函式時,傳遞給函式的是實參的地址的複製(如果實參在棧中,則直接複製該值)。
在函式內部對引數進行操作時,需要先複製出地址,尋找到具體的值,再進行操作。如果該值在棧中,因為是直接複製的值,所以函式內部對引數進行操作不會對外部變數產生影響。
如果原來複製的是原值在堆中的地址,那麼需要先根據該地址找到堆中對應的位置,再進行操作。因為傳遞的是地址的複製,所以函式內對值的操作對外部變數是可見的。
簡單點說,Java中的傳遞,是值傳遞,而這個值,實際上是物件的引用。
而按共享傳遞其實只是按值傳遞的一個特例罷了。所以我們可以說Java的傳遞是按共享傳遞,或者說Java中的傳遞是值傳遞。
值傳遞和引用傳遞
相關文章
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- 值傳遞與引用傳遞
- Java中的值傳遞和引用傳遞Java
- Day30--值傳遞和引用傳遞
- 快速搞懂值傳遞與引用傳遞
- 關於值傳遞和引用傳遞的解釋
- Java - 是值傳遞還是引用傳遞Java
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- js中函式引數值傳遞和引用傳遞JS函式
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 解惑4:java是值傳遞還是引用傳遞Java
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- java方法中只有值傳遞,沒有引用傳遞Java
- JS是按值傳遞還是按引用傳遞?JS
- ES5中的值傳遞/引用傳遞--解釋
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- go 值傳遞和地址傳遞的例子Go
- Java引數傳遞是傳值還是傳引用?Java
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- c++指標傳遞與引用傳遞C++指標
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 07 引用 指標 和傳遞指標
- Python的函式引數傳遞:傳值?引用?Python函式
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Go語言引數傳遞是傳值還是傳引用Go
- chan中傳遞map資料,傳遞的是引用
- java值傳遞Java
- 按值傳遞
- Python引數傳遞,既不是傳值也不是傳引用Python
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- 引數傳遞方式必須是const引用傳遞
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes