[問題] 新手程式流程問題

看板java作者 (甲鳥)時間11年前 (2013/05/25 19:21), 編輯推噓2(2010)
留言12則, 5人參與, 最新討論串1/2 (看更多)
麻煩各位了 今天腦子打結 有關這個程式的輸出值 public class Student{ public int id; } public static void change(Student x){ x.id=102; } public static void main (String[] args){ Student s1=new Student(); s1.id=101; change(s1); System.out.println(s1.id); } 如果Java中全部都是call by value來看的話 印出的結果應該是101才對 可是為什麼答案是102呢? 而且在x.id=102;前面多加x=new Student();就會和我起先想的一樣是101 這兩者我以後要如何分別呢? 流程是怎樣跑的? -- Sent from my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.18.206

05/25 19:31, , 1F
印象中Java除了基本型態外,物件都是call by reference
05/25 19:31, 1F

05/25 20:33, , 2F
Java 的 "全部cbv" 在物件形態時是 call by value (of ref)
05/25 20:33, 2F

05/25 20:35, , 3F
也就是 cbv 的是 s1 這個 ref 本身而不是 s1 所參照的物件
05/25 20:35, 3F

05/25 20:36, , 4F
對於那個物件來說的話這樣的效果正是一樓提到的 cbr
05/25 20:36, 4F

05/25 23:00, , 5F
一樓你的印象出錯
05/25 23:00, 5F

05/25 23:14, , 6F
出錯正是學習的好機會 :)
05/25 23:14, 6F

05/25 23:16, , 7F
只是LP大的說明 其實小弟也是看不大懂Orz
05/25 23:16, 7F

05/25 23:30, , 8F
google了一下 應....應該懂了 http://goo.gl/3cbRH
05/25 23:30, 8F

05/26 13:05, , 9F
我的eclipse 會說 Duplicate local variable x
05/26 13:05, 9F

05/26 13:06, , 10F
不給我在x.id=102;前面多加x=new Student();
05/26 13:06, 10F

05/26 13:23, , 11F
要先搞懂變數與物件在檔案裡的位置
05/26 13:23, 11F

05/26 13:26, , 12F
記憶體
05/26 13:26, 12F
文章代碼(AID): #1He9wXl6 (java)
討論串 (同標題文章)
文章代碼(AID): #1He9wXl6 (java)