作者ERP2 (兩津)
看板java
標題[問題] 請教一個基本的問題
時間Mon Nov 30 02:07:04 2009
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