为什么将 Java 数组作为方法中的参数将其设置在方法之外?
Why does putting Java arrays as an argument in a method set it outside of the method?
我很困惑为什么我的数组在我不更改实际变量的情况下被更改。这是一个示例,展示了我如何对数组和 int 执行完全相同的操作但得到不同的结果。
import java.util.Arrays;
public class example
{
public static void main(String[] args)
{
int[] arrayInMain = {1,2,3,6,8,4};
System.out.println("Original Value: " + Arrays.toString(arrayInMain));
arrayMethod(arrayInMain);
System.out.println("After Method Value: " + Arrays.toString(arrayInMain));
int intInMain = 0;
System.out.println("Original Value: " + intInMain);
intMethod(intInMain);
System.out.println("After Method Value: " + intInMain);
}
private static void arrayMethod(int[] array)
{
int[]b = array;
b[1] = 99;//Why does this not just set the local array? The array outside of this method changes
}
private static void intMethod(int i)
{
int j = i;
i = 99;//This works normally with only the value of j being changed
}
}
输出是:
Original Value: [1, 2, 3, 6, 8, 4]
After Method Value: [1, 99, 3, 6, 8, 4]
Original Value: 0
After Method Value: 0
这是为什么?我是犯了一个愚蠢的错误还是这就是 Java 数组的工作方式?
谢谢!
正如@khelwood 所说,您正在传递对数组的引用。通过更改引用,您还更改了 Java 中的原始内容。你可以做什么来创建数组的实际副本,你可以使用 Arrays.copyOf()
int[] arrayCopy = Arrays.copyOf(yourArray, yourArray.length);
我很困惑为什么我的数组在我不更改实际变量的情况下被更改。这是一个示例,展示了我如何对数组和 int 执行完全相同的操作但得到不同的结果。
import java.util.Arrays;
public class example
{
public static void main(String[] args)
{
int[] arrayInMain = {1,2,3,6,8,4};
System.out.println("Original Value: " + Arrays.toString(arrayInMain));
arrayMethod(arrayInMain);
System.out.println("After Method Value: " + Arrays.toString(arrayInMain));
int intInMain = 0;
System.out.println("Original Value: " + intInMain);
intMethod(intInMain);
System.out.println("After Method Value: " + intInMain);
}
private static void arrayMethod(int[] array)
{
int[]b = array;
b[1] = 99;//Why does this not just set the local array? The array outside of this method changes
}
private static void intMethod(int i)
{
int j = i;
i = 99;//This works normally with only the value of j being changed
}
}
输出是:
Original Value: [1, 2, 3, 6, 8, 4]
After Method Value: [1, 99, 3, 6, 8, 4]
Original Value: 0
After Method Value: 0
这是为什么?我是犯了一个愚蠢的错误还是这就是 Java 数组的工作方式?
谢谢!
正如@khelwood 所说,您正在传递对数组的引用。通过更改引用,您还更改了 Java 中的原始内容。你可以做什么来创建数组的实际副本,你可以使用 Arrays.copyOf()
int[] arrayCopy = Arrays.copyOf(yourArray, yourArray.length);