gpt4 book ai didi

Java for循环按值或按引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:15 24 4
gpt4 key购买 nike

我在我的代码中发现了一个问题。首先是代码:

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
String[] blablubb = { "a", "b", "c" };

for(String s : blablubb) {
s = "over";
}
printArray(blablubb);


for (int i = 0; i < blablubb.length; i++) {
blablubb[i] = "over";
}
printArray(blablubb);

}

public static void printArray(String[] arr) {
for( String s : arr ) {
System.out.println(s);
}
}

}

输出是:

a
b
c
over
over
over

我假设第一个循环也会覆盖数组中的字符串。所以无论如何输出都会结束。它似乎创建了值的副本而不是创建引用。我从来没有意识到这一点。我做错了吗?是否可以选择创建引用?

//编辑:似乎每个人都知道这件事,除了我。我来自 C 背景,并没有足够重视与 C 截然不同的术语引用。幸运的是,我只花了 10 分钟就弄明白了(这次)。

最佳答案

这个:

for (String s : blablubb) {
s = "over";
}

等于:

for (int i = 0; i < blablubb.length; i++) {
String s = blablubb[i];
s = "over";
}

这将创建一个临时字符串,其中包含数组中值的副本,您只需更改该副本。这就是 blablubb[] 内容保持不变的原因。

如果你想改变数组中的值,只需使用你的第二个选项:

for (int i = 0; i < blablubb.length; i++) {         
blablubb[i] = "over";
}

顺便说一下,你可以只用一行打印一个数组:

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

关于Java for循环按值或按引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969515/

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