gpt4 book ai didi

java - 修改 Java 中作为参数传递的数组

转载 作者:行者123 更新时间:2023-12-01 22:36:10 25 4
gpt4 key购买 nike

为什么会这样,按排序顺序显示数组?:

Integer[] array={7,5,9,3,6,0,2,4};

MergeSort.mergeSort(array,0,7);

System.out.println(Arrays.toString(array));

具体来说,为什么将 array 传递给 public static void 方法 mergeSort 最终会修改数组本身?我认为 Java 可以避免这种情况。例如这段代码:

  public static void main(String[] args){
int c=2;
change(c);
System.out.print(c);
}
public static void change(int c){
c=4;
}

返回 2 而不是 4。我很困惑为什么 Java 允许修改作为参数传递的数组,而不是 int

最佳答案

因为 Java 是按值传递的,当您传递 Object(数组是一个 Object)时,您会将引用的值传递给 Object 。相反,原语没有引用,因此您只需传递值。

编辑

同样,您可以使用内置的 Arrays.sort()方法对数组进行排序。 Java 数组不是原始类型。在 Java 中,原始包装类型是不可变的(如 String)。考虑一下,

private static void change(String in) {
in = in + " World"; // <-- modifies in here, can't change caller's reference.
}

private static void change(StringBuilder in) {
in.append(" World"); // <-- uses reference from caller.
}

public static void main(String[] args) {
String str = "Hello";
StringBuilder sb = new StringBuilder(str);
change(str);
change(sb);
System.out.println("one: " + str);
System.out.println("two: " + sb);
}

关于java - 修改 Java 中作为参数传递的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855600/

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