Re: [問題] 請教一個基本的問題

看板java作者 (CA)時間16年前 (2009/12/03 22:02), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串4/11 (看更多)
※ 引述《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)

12/03 23:12, , 1F
既然是 immutable,就不會有「之後所有的改變」,除非
12/03 23:12, 1F

12/03 23:14, , 2F
"immutable"與"所有的改變"是針對不同的東西而言
12/03 23:14, 2F

12/03 23:32, , 3F
嗯~~的確是有語病 QQ
12/03 23:32, 3F

12/03 23:45, , 4F
a+=b如果是a=a+b的縮寫,而不是+=method,當然改不了instance
12/03 23:45, 4F

12/04 00:26, , 5F
我後來仔細想一下, 應該跟 immutable 沒關係
12/04 00:26, 5F
文章代碼(AID): #1B5yK1pq (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 4 之 11 篇):
文章代碼(AID): #1B5yK1pq (java)