作者legnaleurc (CA)
看板java
標題Re: [問題] 請教一個基本的問題
時間Thu Dec 3 22:02:37 2009
※ 引述《adrianshum (Alien)》之銘言:
: 把它理解為 "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 也會看得到.
: 推 petertc:從這樣的結果來看String的行為與primitive type相同 12/02 17:01
: → petertc:但String不是primitive type吧? 12/02 17:03
String 的情況不同, 它不是 primitive type
但是它是 immutable object
也就是說一旦建構完成, 此物件的內容就不能再改變了
之後所有的改變都是新增一個複本, 所以不會作用回 function 外
其他還有 Integer, Double ... 等
--
自High筆記(半荒廢)
http://legnaleurc.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.49.160
※ 編輯: legnaleurc 來自: 112.104.49.160 (12/03 22:07)
→ sbrhsieh:既然是 immutable,就不會有「之後所有的改變」,除非 12/03 23:12
→ sbrhsieh:"immutable"與"所有的改變"是針對不同的東西而言 12/03 23:14
→ legnaleurc:嗯~~的確是有語病 QQ 12/03 23:32
→ godfat:a+=b如果是a=a+b的縮寫,而不是+=method,當然改不了instance 12/03 23:45
→ legnaleurc:我後來仔細想一下, 應該跟 immutable 沒關係 12/04 00:26