作者tzk28419 (甲鳥)
看板java
標題[問題] 新手程式流程問題
時間Sat May 25 19:21:02 2013
麻煩各位了
今天腦子打結
有關這個程式的輸出值
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
1F:→ tails32100:印象中Java除了基本型態外,物件都是call by reference 05/25 19:31
2F:推 LPH66:Java 的 "全部cbv" 在物件形態時是 call by value (of ref) 05/25 20:33
3F:→ LPH66:也就是 cbv 的是 s1 這個 ref 本身而不是 s1 所參照的物件 05/25 20:35
4F:→ LPH66:對於那個物件來說的話這樣的效果正是一樓提到的 cbr 05/25 20:36
5F:→ adrianshum:一樓你的印象出錯 05/25 23:00
6F:→ tails32100:出錯正是學習的好機會 :) 05/25 23:14
7F:→ tails32100:只是LP大的說明 其實小弟也是看不大懂Orz 05/25 23:16
9F:推 coldheaven:我的eclipse 會說 Duplicate local variable x 05/26 13:05
10F:→ coldheaven:不給我在x.id=102;前面多加x=new Student(); 05/26 13:06
11F:→ DeathWatch:要先搞懂變數與物件在檔案裡的位置 05/26 13:23
12F:→ DeathWatch: 記憶體 05/26 13:26