2013-12-11 56 views
0

通過引用調用的問題我知道,Java是通過引用調用, 我有一個關於這些代碼的問題有關使用Java

public class test { 

public static void main(String[] argv){ 


    ArrayList<Integer> a = new ArrayList<Integer>(); 
    int aa = 5; 
    int[] aaa ={0,1,2}; 
    a.add(1); 
    aaa[0]=999; 
    System.out.println("ArrayList "+ a.toString()); 
    System.out.println("int "+ aa); 
    System.out.println("Array "+ Arrays.toString(aaa)); 

    add2(a,aa,aaa); 


    System.out.println("ArrayList"+ a.toString()); 
    System.out.println("int "+ aa); 
    System.out.println("Array "+ Arrays.toString(aaa)); 
} 

private static void add2(ArrayList<Integer> a1,int aa1,int[] aaa1) 
{ 
    a1.add(2); 
    aa1=aa1+10; 
    aaa1[2]=999; 
} 

結果是

ArrayList: [1] 

int:  5 

Array:  [999, 1, 2] 

ArrayList: [1, 2] 

int:  5 

Array:  [999, 1, 999] 

爲什麼ArrayListArray將改變,當我呼叫功能 和「int」不會改變

有人可以向我解釋這些情況,非常感謝

+1

[不,java總是按值調用。](http://stackoverflow.com/questions/40480/is-java-pass-by-reference?rq=1)。 –

+0

**否** Java是按值調用的。 – Makoto

+0

您期待的結果是什麼? –

回答

1

你是部分正確的關於Java通過引用(以及not really,但這是一個不同的話題);但是,只有在傳遞對象時纔是如此。

根據The Java Tutorials

原始參數,如int或雙,被傳遞到由值的方法。這意味着對參數值的任何更改僅存在於該方法的範圍內。當該方法返回時,參數將消失,對其進行的任何更改都將丟失。

正如引言所述,原始類型(如int)通過值傳遞給函數。該函數在被調用時被賦予該原語的副本,因此該函數所做的任何更改都不會影響原始數據。