Re: [問題] 請教一個基本的問題
※ 引述《legnaleurc (CA)》之銘言:
: : 推 petertc:從這樣的結果來看String的行為與primitive type相同 12/02 17:01
: : → petertc:但String不是primitive type吧? 12/02 17:03
: String 的情況不同, 它不是 primitive type
: 但是它是 immutable object
: 也就是說一旦建構完成, 此物件的內容就不能再改變了
: 之後所有的改變都是新增一個複本, 所以不會作用回 function 外
: 其他還有 Integer, Double ... 等
實際上把 adrianshum 提出的例子改成 formal parameter: a 只有單純的
assignment 操作,還是會有人搞錯,因此 adrianshum 的例子重點不在於
Java String (某種程度來說)是 immutable object。
每次出現 call by reference/call by value 的討論時,總是會出現許許多多
的 Java sample code,甚至 C/C++ 的 sample code,爭論了半天認為 Java 是
call by reference 到最後還是不能體會說 Java 只有 call by value 的人為
什麼會如此宣稱。
我個人看過不少次這些爭論,我覺得似乎有一小塊常常都忽略了。
1.
有些人宣稱 Java 在傳遞 non-primitive type value 時,是 pass by
reference,這裡的 pass by reference 如果是指 sun 官方說的 pass by
reference,那麼就沒有什麼好吵的。官方說的 pass by reference 實際上
是 pass reference value 的意思,不同於 CS 界常見的 pass by reference
定義。
2. pass by ref/value,被 pass 的目標"物件"是什麼?(這裡物件泛指有佔據
空間的東西)
當例子使用到 assignment 類的 operator 時,此 operator 的目標(lvalue)是
什麼?(這些是跟 programming language 相依的,既然是以 Java 為主題,就
以 Java PL 中這些 operator 的語意來講)
我個人覺得如果能對第二點多做點切入,用來說明 Java 只有 pass by value
可能會更有說服力(清晰)。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.131.1
※ 編輯: sbrhsieh 來自: 218.173.131.1 (12/03 23:09)
推
12/03 23:16, , 1F
12/03 23:16, 1F
→
12/03 23:18, , 2F
12/03 23:18, 2F
→
12/03 23:20, , 3F
12/03 23:20, 3F
→
12/04 01:34, , 4F
12/04 01:34, 4F
討論串 (同標題文章)