gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:57:54 24 4
gpt4 key购买 nike

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

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;
}
}

输出:

789
-----------------
123

为什么数组能够改变而不是包装对象。谁能解开我的疑惑?谢谢。

最佳答案

Java 方法的所有参数都是按值传递的。当参数是引用类型(而不是原始类型)时,引用按值传递。本质上,这意味着该方法会收到调用者值的副本。

任何对可变对象的引用都可以用来修改该对象,但这不同于修改持有引用的变量。您提供的两种更改方法在这方面有所不同:changeArray() 修改其参数所指的数组对象,但 changeWrapper() 仅将新值分配给包含其参数的局部变量(最初)。

关于java - Array 对象与其他对象有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com