作者:520文雅_293 | 来源:互联网 | 2023-05-28 09:04
所以这就是它.我一直在为一个更大的项目构建一个软件,而现在,我对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]
.
我继续尽可能地简化我的代码,所以这个例子更加实用.显然,我发现它的真实例子的数组比单个元素长.
我还使用多维数组以及对象数组对其进行了测试.行为没有变化.
我现在完全感到困惑,完全不知道如何继续下去.如果你能对这个话题有所了解,请这样做.我不仅仅是困惑.
1> Greg Hewgill..:
以下赋值语句:
oldNumber = number;
制作oldNumber
并number
指向相同的底层数组.也许你想要的是制作副本:
System.arraycopy(number, 0, oldNumber, 0, number.length);
有关完整详细信息,请参阅文档System.arraycopy
.