看板 java 關於我們 聯絡資訊
小弟的母語是C++ 初學java 知道java 的傳參考跟c++是不一樣的 java有分基本變數跟物件變數 當是基本變數的時候相當於c的傳值呼叫 物件變數的時候相當於c的傳參考 我在這邊做了一下測試 發現跟我已知的有點不合 以下是小弟寫的兩個例子 //test.java 1 public class test { 2 public static void main(String[] args) { 3 c1 cc=new c1(); 4 cc.a=5; 5 6 some(cc); 7 System.out.println(cc.a); 8 } 9 private static void some(c1 y) { 10 y.a=20; 11 } 12 } 13 14 class c1 15 { 16 int a; 17 } Output出來的結果a變更為20,與小弟已知的符合 //test2.java 1 public class test2 2 { 3 public static void main(String[] args) { 4 Integer i=new Integer(5); 5 System.out.println(i); 6 some(i); 7 System.out.println(i); 8 } 9 private static void some(Integer j) 10 { 11 j=50; 12 } 13 } Output出來的結果,i仍然是5 不過Integer不是屬於物件型態嘛? 那為什麼在這個例子,仍然相當於c++的傳值呼叫? 做所謂的裝箱動作不就是為了要有傳參考的效果嘛? -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.56.123
james732:我猜因為Integer是immutable的? (不確定) 09/15 23:02
ewn:你只是把j這個物件參考,參考到另一個Integer(50)而已 09/15 23:35