Java中的引用调用问题

Java中的引用调用问题,java,pass-by-reference,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.printl

我知道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
Array
会发生变化 “int”不会改变


有人能给我解释一下这些情况吗,非常感谢

关于Java是通过引用传递的,你部分是对的(好吧,但这是一个不同的主题);但是,只有在传递对象时才是这样

根据:

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


正如引号所述,基本类型(如
int
)通过值传递给函数。调用该函数时,会将原语的副本提供给该函数,因此该函数所做的任何更改都不会影响原始数据。

。否。Java是按值调用的..您希望得到什么结果?请看这里,
ArrayList: [1]

int:       5

Array:     [999, 1, 2]

ArrayList: [1, 2]

int:       5

Array:     [999, 1, 999]