看板 java 關於我們 聯絡資訊
麻煩各位了 今天腦子打結 有關這個程式的輸出值 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
tails32100:印象中Java除了基本型態外,物件都是call by reference 05/25 19:31
LPH66:Java 的 "全部cbv" 在物件形態時是 call by value (of ref) 05/25 20:33
LPH66:也就是 cbv 的是 s1 這個 ref 本身而不是 s1 所參照的物件 05/25 20:35
LPH66:對於那個物件來說的話這樣的效果正是一樓提到的 cbr 05/25 20:36
adrianshum:一樓你的印象出錯 05/25 23:00
tails32100:出錯正是學習的好機會 :) 05/25 23:14
tails32100:只是LP大的說明 其實小弟也是看不大懂Orz 05/25 23:16
tails32100:google了一下 應....應該懂了 http://goo.gl/3cbRH 05/25 23:30
coldheaven:我的eclipse 會說 Duplicate local variable x 05/26 13:05
coldheaven:不給我在x.id=102;前面多加x=new Student(); 05/26 13:06
DeathWatch:要先搞懂變數與物件在檔案裡的位置 05/26 13:23
DeathWatch: 記憶體 05/26 13:26