两个数组总是相等的
two arrays are always equal
我有这个代码
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;
结果数组总是相等的。我无法理解原因。
在 JFrame 中使用 Button,在 GUI 界面中我可以修改 alarm 的值,但旧值和实际值同时更改!
当您访问并更新一个数组的元素时,您也在更新另一个数组的元素,因为它们引用相同的对象。在填充数组时,您需要在每个数组中创建单独的项。
您遗漏了程序的一个重要部分,即您实际填充这些数组的地方。很有可能,您没有进行深拷贝。
Deep copy of an object array
行out_status_old = out_status;
没有创建数组的副本。您只有两个变量,out_status
和 out_status_old
,指向 相同的 数组。
如果你想创建一个正确的数组副本,你可以,例如使用 Arrays.copyOf
(或其变体之一)。
我有这个代码
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;
结果数组总是相等的。我无法理解原因。 在 JFrame 中使用 Button,在 GUI 界面中我可以修改 alarm 的值,但旧值和实际值同时更改!
当您访问并更新一个数组的元素时,您也在更新另一个数组的元素,因为它们引用相同的对象。在填充数组时,您需要在每个数组中创建单独的项。
您遗漏了程序的一个重要部分,即您实际填充这些数组的地方。很有可能,您没有进行深拷贝。
Deep copy of an object array
行out_status_old = out_status;
没有创建数组的副本。您只有两个变量,out_status
和 out_status_old
,指向 相同的 数组。
如果你想创建一个正确的数组副本,你可以,例如使用 Arrays.copyOf
(或其变体之一)。