作者adrianshum (Alien)
看板java
標題Re: [問題] 請教一個基本的問題
時間Mon Nov 30 12:46:29 2009
※ 引述《ERP2 (兩津)》之銘言:
[43]
: 這我可以理解,因為兩個a值參照的是不同物件。
: 只是疑惑為什麼上一題的array沒有將結果指定回就可以保留運算結果。
:
:
: 謝謝大家。 :)
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 118.167.172.8
: → ERP2:自己回答一下: 是因為array是" call by reference"的嗎? 11/30 02:23
: → etman395:是的 在java中 array是物件 只要是物件就是call by ref.. 11/30 02:50
: → ERP2:謝謝你^^ 11/30 03:12
推文等太久,乾脆回文。
把它理解為 "obj 就是 call by ref" ,包準你會
在另一種情況下搞混。
例如:
void foo(String a) {
a += "foo";
}
String x = "xxx";
foo(x);
// x 的結果是什麼?
很不幸,把東西說成 "物件就是 call by ref"
對這種情況十居其九都會搞錯
何不好好理解一下 Java 自己的說法: Java 只有 pass-by-value.
object 傳的是 reference (或者理解為 handle, pointer etc) 的
copy. 只為這個 copy 和原本的 reference 都是指向同一 object,
所以修改 obj 的內容,caller 也會看得到.
: → Jichang:物件的時候是同一個物件 基本型別時是 call by value 11/30 09:00
: → petr:Java只有call by value,要去了解Java memoey model 11/30 11:49
: → petr: memory 11/30 12:06
: → adrianshum:把它叫成 "call-by-ref" 包準你會有其他錯誤。何不把 11/30 12:40
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.77.19.136
※ 編輯: adrianshum 來自: 219.77.19.136 (11/30 12:47)
推 ERP2:謝謝你~~ 11/30 22:24
推 petertc:所以這題的答案是? 12/01 11:12
→ ERP2:a的內容在main中沒有改變 還是"xxx"吧? 12/01 21:34
推 petertc:從這樣的結果來看String的行為與primitive type相同 12/02 17:01
→ petertc:但String不是primitive type吧? 12/02 17:03