作者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
1F:→ ERP2:自己回答一下: 是因为array是" call by reference"的吗? 11/30 02:23
2F:→ etman395:是的 在java中 array是物件 只要是物件就是call by ref.. 11/30 02:50
3F:→ ERP2:谢谢你^^ 11/30 03:12
4F:→ Jichang:物件的时候是同一个物件 基本型别时是 call by value 11/30 09:00
5F:→ petr:Java只有call by value,要去了解Java memoey model 11/30 11:49
6F:→ petr: memory 11/30 12:06
7F:→ adrianshum:把它叫成 "call-by-ref" 包准你会有其他错误。何不把 11/30 12:40
8F:→ jej:第1个和第2个,形成entity的时候1告诉物件a[0]要+1,2 要a++ 12/01 00:42
9F:→ jej:第1个main new int[]後形成object作动作,第2个初始化还不是obj 12/01 00:43
10F:→ jej:所以还是0, 我是降子想... 比较简单避免自己混乱~ 12/01 00:45