我对阵列的工作方式感到困惑.如果我将数组引用传递给某个方法,那么该方法可以更改先前存储在数组中的索引值.但是,如果对包装类对象执行相同操作,则该方法无法更改该值.这是代码:
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)
为什么数组能够更改而不是包装对象.谁能清除我的怀疑?谢谢.
Java方法的所有参数都按值传递.当参数是引用类型(而不是基本类型)时,引用将按值传递.实质上,这意味着该方法接收调用者值的副本.
对可变对象的任何引用都可用于修改该对象,但这与修改保存引用的变量不同.您提供的两个更改方法与此不同:changeArray()
修改其参数引用的数组对象,但changeWrapper()
仅为包含其参数的局部变量(最初)分配新值.
归档时间: |
|
查看次数: |
91 次 |
最近记录: |