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

看板java作者 (Alien)時間14年前 (2009/11/30 12:46), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串2/11 (看更多)
※ 引述《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)

11/30 22:24, , 1F
謝謝你~~
11/30 22:24, 1F

12/01 11:12, , 2F
所以這題的答案是?
12/01 11:12, 2F

12/01 21:34, , 3F
a的內容在main中沒有改變 還是"xxx"吧?
12/01 21:34, 3F

12/02 17:01, , 4F
從這樣的結果來看String的行為與primitive type相同
12/02 17:01, 4F

12/02 17:03, , 5F
但String不是primitive type吧?
12/02 17:03, 5F
文章代碼(AID): #1B4qudnW (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 2 之 11 篇):
文章代碼(AID): #1B4qudnW (java)