gpt4 book ai didi

java - 为什么 Java 引用在这个程序中没有像预期的那样工作

转载 作者:行者123 更新时间:2023-12-01 13:54:43 25 4
gpt4 key购买 nike

我正在处理一个问题,我发现 Java 引用没有像我预期的那样工作。当然,我是罪魁祸首:),有人可以请我为什么会发生以下情况。让我先在这里发布代码。

package misc.matrix;

public class ReferenceTester {
public static void main(String args[]){
Boolean[][] input = {
{true ,false ,true ,true ,false },
{false ,true ,true ,true ,true },
{true ,true ,true ,true ,true },
{true ,true ,true ,true ,true },
{true ,false ,true ,true ,true }
};

print(input);

for(Boolean[] eachRow:input){
for(Boolean eachVal:eachRow){
eachVal = Boolean.TRUE;
}
}
print(input);

/*Expected output
true true true true true
true true true true true
true true true true true
true true true true true
true true true true true
*/
}

/**
* Simply prints the array
*/
private static void print(Boolean[][] input) {
for(Boolean[] outArray:input){
for(Boolean iVal:outArray){
System.out.print(iVal?iVal+" ":iVal+" ");
}
System.out.println();
}
}
}

如果你看一下上面的程序,我想做的就是将 Array 中的所有值更改为 true 并打印它。但它只是再次打印输入。有人可以告诉我这是为什么吗?最初我在程序中使用了原始 boolean 值,但由于我不想创建副本,所以我使用了包装器 boolean 类,它是一个 Java 对象而不是原始值。 (eachVal 不是一个 JAVA 对象吗!?!?!?!?)为什么在 Java 中会发生这种情况。为什么它不打印所有值为真?

请指教。

最佳答案

您不能在 foreach 循环中修改源对象。您的循环必须是这样的标准 for 循环:

for(int i = 0; i < input.length; i++){ 
for(int j = 0; j < input[i].length; j++){
input[i][j] = true;
}
}

编辑:更准确地说,循环中的eachVal 是一个指针,而不是引用;因此将其设置为指向不同的值不会更改原始值。

foreach 循环在幕后使用的确切形式已给出 here , 如果您想独立确认这一点。

关于java - 为什么 Java 引用在这个程序中没有像预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291065/

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