看板 java 關於我們 聯絡資訊
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
ERP2:自己回答一下: 是因為array是" call by reference"的嗎? 11/30 02:23
etman395:是的 在java中 array是物件 只要是物件就是call by ref.. 11/30 02:50
ERP2:謝謝你^^ 11/30 03:12
Jichang:物件的時候是同一個物件 基本型別時是 call by value 11/30 09:00
petr:Java只有call by value,要去了解Java memoey model 11/30 11:49
petr: memory 11/30 12:06
adrianshum:把它叫成 "call-by-ref" 包準你會有其他錯誤。何不把 11/30 12:40
jej:第1個和第2個,形成entity的時候1告訴物件a[0]要+1,2 要a++ 12/01 00:42
jej:第1個main new int[]後形成object作動作,第2個初始化還不是obj 12/01 00:43
jej:所以還是0, 我是降子想... 比較簡單避免自己混亂~ 12/01 00:45