[問題] 傳值

看板java作者 (Arim5566)時間15年前 (2010/09/15 22:59), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/3 (看更多)
小弟的母語是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

09/15 23:02, , 1F
我猜因為Integer是immutable的? (不確定)
09/15 23:02, 1F

09/15 23:35, , 2F
你只是把j這個物件參考,參考到另一個Integer(50)而已
09/15 23:35, 2F
文章代碼(AID): #1CaDzOtf (java)
討論串 (同標題文章)
以下文章回應了本文
問題
2
2
完整討論串 (本文為第 1 之 3 篇):
問題
3
9
問題
2
2
問題
0
2
文章代碼(AID): #1CaDzOtf (java)