为什么会这样,按排序顺序显示数组
?:
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/