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

看板java作者 (偶爾想擺爛一下)時間16年前 (2009/12/03 23:07), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串5/11 (看更多)
※ 引述《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
well, 我只是想解釋為什麼 String 和 Object pass 的
12/03 23:16, 1F

12/03 23:18, , 2F
結果不同. 之前有看到一個網頁總結出二點重點, 不過
12/03 23:18, 2F

12/03 23:20, , 3F
現在找不到了 orz
12/03 23:20, 3F

12/04 01:34, , 4F
其實沒有不同,如果 fooArg = new Foo() 結果也是一樣
12/04 01:34, 4F
文章代碼(AID): #1B5zGkVS (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 5 之 11 篇):
文章代碼(AID): #1B5zGkVS (java)