关于Java中引用调用的问题

时间:2013-12-11 04:38:26

标签: java pass-by-reference

我知道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会在我调用函数时发生变化 和&#34; int&#34;不会改变

有人可以向我解释这些情况,非常感谢

1 个答案:

答案 0 :(得分:1)

对于Java是引用传递(not really,你是部分正确的,但这是一个不同的主题);但是,只有在传递对象时才会这样。

根据The Java Tutorials

  

原始参数(例如int或double)按值传递给方法。这意味着对参数值的任何更改都仅存在于方法的范围内。当方法返回时,参数消失,对它们的任何更改都将丢失。

正如引用所述,原始类型(如int)按值传递给函数。在调用函数时,该函数的副本将被赋予该函数,因此该函数所做的任何更改都不会对原始数据产生影响。