[問題] 請教一個基本的問題

看板java作者 (兩津)時間16年前 (2009/11/30 02:07), 編輯推噓0(0010)
留言10則, 6人參與, 最新討論串1/11 (看更多)
1. public class X { 2. public static void main (string []args) { 3. int [] a =new int [1] ; 4. modify (a) ; 5. System.out.println (a[0]) ; 6. } 7. public static void modify (int [] a ) { 8. a [0]++ ; 9. } 10. } ANS: a[0]=1 請問為什麼a[0]的值可以加到1呢? 是說陣列不用使用return等方法就可以改變數值嗎? ======================================================= 對照另一題: 1. public class X { 2. private static int a ; 3. public static void main (string []args) { 4. modify (a) ; 5. System.out.println (a) ; 6. } 7. public static void modify (int a ) { 8. a ++ ; 9. } 10. } ANS: a=0 這我可以理解,因為兩個a值參照的是不同物件。 只是疑惑為什麼上一題的array沒有將結果指定回就可以保留運算結果。 謝謝大家。 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.172.8

11/30 02:23, , 1F
自己回答一下: 是因為array是" call by reference"的嗎?
11/30 02:23, 1F

11/30 02:50, , 2F
是的 在java中 array是物件 只要是物件就是call by ref..
11/30 02:50, 2F

11/30 03:12, , 3F
謝謝你^^
11/30 03:12, 3F

11/30 09:00, , 4F
物件的時候是同一個物件 基本型別時是 call by value
11/30 09:00, 4F

11/30 11:49, , 5F
Java只有call by value,要去了解Java memoey model
11/30 11:49, 5F

11/30 12:06, , 6F
memory
11/30 12:06, 6F

11/30 12:40, , 7F
把它叫成 "call-by-ref" 包準你會有其他錯誤。何不把
11/30 12:40, 7F

12/01 00:42, , 8F
第1個和第2個,形成entity的時候1告訴物件a[0]要+1,2 要a++
12/01 00:42, 8F

12/01 00:43, , 9F
第1個main new int[]後形成object作動作,第2個初始化還不是obj
12/01 00:43, 9F

12/01 00:45, , 10F
所以還是0, 我是降子想... 比較簡單避免自己混亂~
12/01 00:45, 10F
文章代碼(AID): #1B4hXBjV (java)
討論串 (同標題文章)
文章代碼(AID): #1B4hXBjV (java)