[英]Strange array behaviour in Java
我最近一直在做一些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
所做的任何更改也將反映在array2
中。
要解決此問題,請使用java.util.Arrays.copyOf(array, array.length)
或array.clone()
(請注意,這會返回數組的淺表副本)。
而不是這樣做,
public Beispiel(double[] array){
array1 = array;
array2 = array;
}
嘗試這樣做並分享結果
public Beispiel(double[] array){
array1 = Arrays.copyOf(array, array.length);
array2 = Arrays.copyOf(array, array.length);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.