我最近一直在做一些 Java 编码,遇到了这个非常奇怪的问题。我用 Java 编写了一个类,它扩展 JPanel 并根据其大小调整对象的大小。
为了更好地理解,我将问题简化为尽可能小的代码。
问题是,当我运行下面的代码时,它总是不仅会设置 array1[0]
,还会设置 array2[0]
。我不明白为什么 array2
会改变,即使我从未改变过它......
我添加了一些内容以突出显示我认为代码执行的操作,但我看不到。
当我运行代码并调整窗口大小时,打印出的值会迅速变化,稍微移动一下就会变成无穷大。
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Beispiel extends JPanel {
double[] array1, array2;
public Beispiel(double[] array){
array1 = array;
array2 = array;
}
public void repaint(){
try {
array1[0] = array2[0]*this.getWidth();
System.out.println(array2[0]);
// array2[0] = array1[0] <--- what i think it does
} catch(Exception e){
}
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(300,200);
frame.setLayout(new BorderLayout());
double[] array = {1.0,3.0};
frame.add(new Beispiel(array));
frame.setVisible(true);
}
}
最佳答案
array2
确实改变了。当您使用 array1 = array
和 array2 = array
时,您使 array1
和 array2
引用相同的内容大批。因此,对 array1
所做的任何更改也会反射(reflect)在 array2
中。
要解决此问题,请使用 java.util.Arrays.copyOf(array, array.length)
或 array.clone()
(请注意,这会返回一个浅表但是,数组的副本)。
关于java - Java 中奇怪的数组行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023387/