gpt4 book ai didi

java - 为什么在方法中传递数组引用而不是其值?

转载 作者:行者123 更新时间:2023-12-01 19:40:07 25 4
gpt4 key购买 nike

我正在声明一个数组 myArray在 main 方法中并在 doIt(myArray) 中传递了相同的数组方法。

当我在 doIt() 中获取另一个数组变量时方法并分配myArray到它。然后我打印了myArray在主方法中。

但我正在对 integer 做同样的事情和String ,在各个方法中所做的更改不会影响输出。

我的代码是

public class ChangeIt {

public static void main(String[] args) {
int[] myArray = {1,2,3,4,5};

new ChangeIt().doIt(myArray);
for (int i = 0; i < myArray.length; i++) {
System.out.print(myArray[i] + " ");
}

String str= "Gaurav";
new ChangeIt().printString(str);
System.out.println("\n"+ str);

int num = 5;
new ChangeIt().printNum(num);
System.out.println(num);
}

private void doIt(int[] z) {
int[] A = z;
A[0] = 99;

}
private void printString(String s){
String s2 = s + "Kukade";
}

private void printNum(int x) {
int y = x+1;
}

}

输出为

99 2 3 4 5
Gaurav
5

那么,到底发生了什么?为什么打印99而不是1

最佳答案

But I am doing same thing with integer and String, the changes made in respective method do not affect the output.

根本区别在于,使用 intString 时,您不会更改原始 int 的状态字符串。事实上,您甚至没有分配给参数(但如果您这样做了,它就不会在函数外部被观察到)。

但是对于数组,您要更改数组的状态,而不是将新数组分配给本地数组。

这个:

int[] A = z;

只是将A指向z指向的同一个数组,它不会创建数组。由于它们都指向原始数组,因此分配给其中一个元素会更改数组的状态。

关于java - 为什么在方法中传递数组引用而不是其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652085/

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