簡體   English   中英

Java中奇怪的數組行為

[英]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 = arrayarray2 = array ,您array1array2引用相同的數組。 因此對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM