gpt4 book ai didi

java - 为什么 Java 的行为不像 "Pass-By-Value"一样?

转载 作者:行者123 更新时间:2023-12-01 18:20:11 24 4
gpt4 key购买 nike

下面主要的输出是[5,4,3,2,1][1,2,3,4,5]

这对我来说毫无意义。是的,我第一次运行“reverseArrayIteratively”时,我肯定期待 [5,4,3,2,1] 所以这是正确的输出,但是在第二个函数(reverseArrayRecursively)之后,我期望它也返回 [ 5,4,3,2,1]因为Java应该是“按值传递”,所以我没想到“reverseArrayIteratively”实际上会围绕myIntArray的值进行更改。我认为无论我调用reverseArrayIteratively或reverseArrayRecursively多少次,主函数中的myIntArray都将保持在[1,2,3,4,5]。这里发生了什么?

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] myIntArray = {1,2,3,4,5};
System.out.println(Arrays.toString(reverseArrayIteratively(myIntArray, 0, myIntArray.length-1)));
System.out.println(Arrays.toString(reverseArrayRecursively(myIntArray, 0, myIntArray.length-1)));
}

public static int[] reverseArrayIteratively(int[] array, int first, int end) {
while (first < end) {
int temp = array[end];
array[end] = array[first];
array[first] = temp;
first++;
end--;
}
return array;
}

public static int[] reverseArrayRecursively(int[] array, int first, int end) {
int temp = array[end];
array[end] = array[first];
array[first] = temp;
first++;
end--;
if (first < end) {
reverseArrayRecursively(array, first, end);
}
else {
return array;
}
return array;
}

最佳答案

它的行为类似于按值传递。我认为您的困惑源于这对于非原始参数的含义(数组是一个对象,而不是原始参数)。对于对象参数,按值传递的始终是对象的引用。在递归方法中,您正在修改数组参数的元素,因此当然会在调用代码中更改数组元素。

如果您有 C++ 背景,请将 Java 引用视为 C++ 指针,而不是 C++ 引用。

关于java - 为什么 Java 的行为不像 "Pass-By-Value"一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831591/

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