gpt4 book ai didi

java - 为什么不能在 Java 中通过引用调整数组的大小?

转载 作者:行者123 更新时间:2023-11-30 06:10:23 24 4
gpt4 key购买 nike

<分区>

我在玩数组并以不同的方式操纵它们时,偶然发现了一些非常奇怪的行为!我最初关心的是将一个数组替换为另一个大小可能不同也可能不同的数组,因为它将从任意长度的文件中读取。我决定尝试不同的东西,看看会发生什么。我的第一次尝试是这样的:

public class RewriteArray {
public static void main(String[] args) {
String[] arr = { "1", "2", "3"};

System.out.print("Before rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();

changeArr(arr);

System.out.print("After rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();
}

private static void changeArr(String[] arr) {
arr[0] = "3";
arr[1] = "2";
arr[2] = "1";
}
}

这达到了我的预期,通过引用对象证明了更改,并给出了输出:

Before rewrite: 1 2 3
After rewrite: 3 2 1

然后我尝试在 changeArr 方法中调整数组的大小,这时事情变得很奇怪。

public class RewriteArray {
public static void main(String[] args) {
String[] arr = { "1", "2", "3"};

System.out.print("Before rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();

changeArr(arr);

System.out.print("After rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();
}

private static void changeArr(String[] arr) {
arr = new String[4];
arr[0] = "3";
arr[1] = "2";
arr[2] = "1";
arr[3] = "0";
}
}

我原以为 arr 会被新大小的新对象替换,然后重写。相反,我得到了:

Before rewrite: 1 2 3
After rewrite: 1 2 3

没有错误或任何错误,但数组没有任何变化!然后我尝试通过创建一个临时数组并重新分配指针来调整初始数组的大小。

private static void changeArr(String[] arr) {
String[] tempArr = new String[4];
tempArr[0] = "3";
tempArr[1] = "2";
tempArr[2] = "1";
tempArr[3] = "0";
arr = tempArr;
}

同样,输出与之前的版本相同!没有错误,但也没有变化。为了完全确定至少可以调整数组大小,我尝试在单独的方法中创建一个临时数组并返回该数组。

public class RewriteArray {
public static void main(String[] args) {
String[] arr = { "1", "2", "3"};

System.out.print("Before rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();

arr = loadArr();

System.out.print("After rewrite: ");
for (String str : arr)
System.out.print(str + " ");
System.out.println();
}

private static String[] loadArr() {
String[] tempArr = new String[4];
tempArr[0] = "3";
tempArr[1] = "2";
tempArr[2] = "1";
tempArr[3] = "0";

return tempArr;
}
}

这次终于成功了!我得到以下输出:

Before rewrite: 1 2 3
After rewrite: 3 2 1 0

目前看来,最好是必须在单独的方法中创建新的临时数组并返回该数组,然后将返回的数组分配给原始数组。我只是不明白为什么它不能在内部使用 changeArr 方法。这不是在内部传递引用吗?如果不是,为什么我的第一次尝试成功而其他人却失败了?

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