Java-旧数组总是等于新数组吗?

时间:2018-08-28 17:21:05

标签: java arrays

我不太擅长编程,但是现在,我需要编写一些Java应用程序,而我遇到了一个奇怪的问题。我已经尝试解决了几个小时。

这是问题所在: 我正在将少量屏幕(20x20)保存到程序中。我这样做是通过遍历每个像素,然后通过Java.awt.robot将RGB保存到数组中。使用以下功能,程序应在将新图像保存到屏幕的新区域之前将复制的图像保存到3个阵列(R,G和B)中(我想稍后对其进行比较并查找更改)。一件该死的事情:在不覆盖主数组的情况下保存数据的旧数组总是在不通知我的情况下被覆盖。

private void fillArrayData(){
    oldDataR = dataR;   <----- The problem is here. These arrays are now overwritten with the
    oldDataG = dataG;   <----- current data, just before I write stuff to dataR, G and B.
    oldDataB = dataB;   <----- As you see, I don't modify oldDataR, G, B later on.

    scanArea.x = MouseInfo.getPointerInfo().getLocation().x;
    scanArea.y = MouseInfo.getPointerInfo().getLocation().y;
    for(int i = 0; i<scanSize; i++){
        for(int n = 0; n<scanSize; n++){
            dataR[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getRed();
            dataG[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getGreen();
            dataB[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getBlue();
        }
    }
}

即使我以后再也不会访问oldDataR,oldDataG和oldDataB,在此空白结束后,它每次都等于dataR,dataG和dataB。在我将新数据保存到oldData-Arrays之后将新数据写入三个主要数组(dataR,dataG,dataB)时,这没有任何意义。是的,我确保rbt.getPixelColor接收的数据与以前不同。

请帮助我,到目前为止我真的很沮丧,但是需要继续前进。

2 个答案:

答案 0 :(得分:5)

之所以会这样,是因为oldDataR(和其余的)只是指向同一数组的另一个变量,如果您想将旧值分别保留在数组中并修改原始值,则需要复制它。

这篇文章对复制二维数组很有帮助: copy a 2d array in java

答案 1 :(得分:2)

您将数组作为引用传递,因此,最后,这是两个变量的指针中的同一数组。

您是否尝试过阵列复制?

System.arraycopy()

Arrays.copyOf()

您的代码如下:

oldDataR = Arrays.copyOf(dataR);

修改

我错过了数组的多维维度,只需遵循@khachik链接建议,这样您就可以处理这两个维度。