Array对象与其他对象有何不同

JPG*_*JPG 2 java

我对阵列的工作方式感到困惑.如果我将数组引用传递给某个方法,那么该方法可以更改先前存储在数组中的索引值.但是,如果对包装类对象执行相同操作,则该方法无法更改该值.这是代码:

public class TestArray {
    public static void main(String[] args) {
        ChangeValues ch=new ChangeValues();
        int intArr[]={1,2,3};
        Integer iWrapper=new Integer(123);
        ch.changeArray(intArr);
        for(int i:intArr){
            System.out.print(i);// o/p: 789
        }
        System.out.println("\n-----------------");
        ch.changeWrapper(iWrapper);
        System.out.println(iWrapper);// o/p: 123
    }
}

class ChangeValues{
    void changeArray(int i[]){
        i[0]=7;
        i[1]=8;
        i[2]=9;
    }
    void changeWrapper(Integer i){
        i=789;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

789
-----------------
123
Run Code Online (Sandbox Code Playgroud)

为什么数组能够更改而不是包装对象.谁能清除我的怀疑?谢谢.

Joh*_*ger 5

Java方法的所有参数都按值传递.当参数是引用类型(而不是基本类型)时,引用将按值传递.实质上,这意味着该方法接收调用者值的副本.

对可变对象的任何引用都可用于修改该对象,但这与修改保存引用的变量不同.您提供的两个更改方法与此不同:changeArray()修改其参数引用的数组对象,但changeWrapper()仅为包含其参数的局部变量(最初)分配新值.