gpt4 book ai didi

java - Java 中令人费解的数组赋值行为

转载 作者:行者123 更新时间:2023-12-01 06:32:09 24 4
gpt4 key购买 nike

就这样吧。我一直在为一个更大的项目构建一个软件,而现在,我对 Java 处理我的代码的方式感到困惑。我完全不知道为什么 Java 会有这样的行为。

它似乎跳过了我的部分代码,并在没有调用相应方法时将值分配给与我预期不同的数组。

我已经使用 IntelliJ 调试器对此进行了几个小时的研究,仔细检查了所有内容,但我没有找到任何原因来解释为什么事情会这样发生。

package com.whatareyoudoing.java;
import java.util.Arrays;

/**
* WHAT THE ACTUAL DUCK
*/
public class WTF {
private int[] number;
private int[] oldNumber;

public WTF() {
number = new int[1];
oldNumber = new int[1];
}

public void putNumber(int c) {
number[0] = c;
}

public void putOld() {
if(Arrays.equals(oldNumber, number)) {
System.out.println("Nothing to do!");
return; //How on earth can they literally be the same?!
}
oldNumber = number;
}

public void doWTF() {
putNumber(1);
putOld(); // Works.
putNumber(2); // Expected Result: number = 2; oldNumber = 1 [NOPE] number = 2; oldNumber = 2
putOld(); // [NOPE] Simply Skips with "Nothing to do"
putNumber(3); // Same odd behaviour
putOld(); // Aaaand skips again.
}
}

第一次调用 putNumber 后,再次使用 putNumber 同时 将值放入两个变量(oldNumber Number),而不是仅在 number[0] 中。

我继续尽可能地简化我的代码,因此这个示例更加实用。显然,我发现的真实示例的数组比单个元素长。

我还使用多维数组以及对象数组对其进行了测试。行为没有变化。

我现在完全困惑了,完全不知道如何继续下去。如果您能阐明这个主题,请这样做。我很困惑。

最佳答案

下面的赋值语句:

    oldNumber = number;

使oldNumbernumber指向同一个底层数组。也许您想要的是制作副本:

    System.arraycopy(number, 0, oldNumber, 0, number.length);

请参阅documentation for System.arraycopy了解完整详细信息。

关于java - Java 中令人费解的数组赋值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27809850/

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