Java 两个数组总是相等的

Java 两个数组总是相等的,java,arrays,equality,Java,Arrays,Equality,我有这个密码 for (int i=0; i<tini.length; i++){ tini[i].tempLabel.setText("Temp: "+ Float.toString(tempArray[i]) +"°" ); out_status[i] = tini[i].alarm; frame.statusLabel.setText("Connetction: OK, String: OK"); } System.out.println("old: " +

我有这个密码

for (int i=0; i<tini.length; i++){
    tini[i].tempLabel.setText("Temp: "+ Float.toString(tempArray[i]) +"°" );
    out_status[i] = tini[i].alarm;
    frame.statusLabel.setText("Connetction: OK, String: OK");
}

System.out.println("old: " + Arrays.toString(out_status_old));                  
System.out.println("new: " + Arrays.toString(out_status));
if (Arrays.equals(out_status, out_status_old) ){
    System.out.println("UGUALI");
}

out_status_old = out_status;

for(int i=0;i当您访问并更新一个数组的元素时,您也在更新另一个数组的元素,因为它们引用相同的对象。填充数组时,您需要在每个数组中创建单独的项

您遗漏了程序的一个重要部分,即实际填充这些数组的位置。很可能,您没有进行深度复制


out\u status\u old=out\u status;
不创建数组的副本。您只有两个变量,
out\u status
out\u status\u old
,指向同一数组


如果要创建阵列的正确副本,例如,可以使用(或其变体之一)为了更好的帮助,考虑创建和发布一个。我们不想看到你的整个程序,但是你应该把你的代码浓缩成最小的仍然编译的代码,没有与你的问题不相关的额外代码,但是仍然显示你的问题。你可以简单地尝试孤立一个问题来很好地解决这个问题。nd暴露错误。
out\u status\u old=out\u status;
不会复制数组。您只有两个变量指向同一个数组。我删除了一行代码,因为它与问题完全无关,所有人都认为这是实际的问题。这不是问题,只是程序的下一步。它不相关到question@JoePhilllips为什么你认为这一行是不相关的?代码可能是在循环中执行的,或者它是一个多次执行的回调。因此,在代码块后面的一行很可能会影响该代码的下一次执行。因为他所做的比较检查在这一行之上line@JoePhilllips你知道t循环的概念,以及在另一行下面的一行代码可以在该行之前执行,对吗?OP改变数组中元素的唯一地方是:
tini[i].tempLabel.setText
。你认为这是问题吗?那为什么OP要检查
Arrays.equals(out\u status,out\u status\u old)
想知道为什么这些是“丑八怪”?