Java 从ArrayList访问区域边界时<;面积>;在初始化它的类之外,收到的矩形不正确

Java 从ArrayList访问区域边界时<;面积>;在初始化它的类之外,收到的矩形不正确,java,arraylist,awt,area,bounds,Java,Arraylist,Awt,Area,Bounds,我已经研究过这个代码很多次了,但似乎无法理解它的行为 我向for循环中的ArrayList中添加了大量Area实例,同时还创建了另一个Area,它是所有添加到数组中的实例的合并(但是该合并的ArrayList) 当试图从另一个类中检索ArrayList的第一项时,它给出了合并的区域的边界,该区域在第一个位置从未添加过 import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Rectangle2D; import

我已经研究过这个代码很多次了,但似乎无法理解它的行为

我向for循环中的
ArrayList
中添加了大量
Area
实例,同时还创建了另一个
Area
,它是所有添加到数组中的实例的合并(但是该合并的
ArrayList

当试图从另一个类中检索
ArrayList
的第一项时,它给出了合并的
区域的边界,该区域在第一个位置从未添加过

import java.awt.Shape;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;


public class CorruptArray {
public ArrayList<Area> arrayList = new ArrayList<Area>();

public CorruptArray(){
        double x = 100.0;
        double y = 200.0;
        double width = 100.0;
        double height = 200.0;
        Area map = null;

        int i = 5;
        for(int j =0 ; j<i; j++){
            arrayList.add(new Area(new Rectangle2D.Double(x,y,width,height)));

            x+=10;
            y+=10;
            width+=10;
            height+=10;
        }

        int k = 0;
        for(Area area : arrayList){
            System.out.println("INITIAL BOUNDS ON ENTRY:  " + area.getBounds().toString());
            if(k == 0){
                map = area;
                k++;

            }else{
                map.add(area);

            }
            System.out.println("OVERALL JOINED AREA - map   " + map.getBounds().toString() + "\n");
        }

        TestArray test = new TestArray(this);
    }

private static class TestArray{
    TestArray(CorruptArray ca){
        System.out.println("\n\n");
        for(Area area : ca.arrayList){
            System.out.println("RETRIVAL OF BOUNDS FROM TestArray:  " + area.getBounds().toString());
        }
    }
}



public static void main(String args[]){
    new CorruptArray();
}

不添加合并区域,但从arraylist中获取第一个区域并对其进行修改。就发生在这里:

if (k == 0) {
   map = area;
稍后,将列表中的其他区域添加到地图中,这是列表中的第一个区域。您可能希望根据列表中的第一个区域创建新区域:

if (k == 0) {
   map = new Area(area);

不添加合并区域,但从arraylist中获取第一个区域并对其进行修改。就发生在这里:

if (k == 0) {
   map = area;
稍后,将列表中的其他区域添加到地图中,这是列表中的第一个区域。您可能希望根据列表中的第一个区域创建新区域:

if (k == 0) {
   map = new Area(area);

我认为只有在我声明
area=map
时这才是一个问题,即使如此,如果我转到列表中的其他项,为什么我随后对map进行的调整会影响
ArrayList
中的第一个区域?您已经将第一个
area
对象的引用复制到
map
变量。
map
和列表中的第一个条目(
arraylist.get(0)
)和
map.getBounds()
arraylist.getBounds()现在引用了
arraylist
区域的单个实例
从同一区域获取边界。我认为只有当我声明
area=map
时,这才是一个问题,即使如此,如果我转移到列表中的其他项目,为什么后续对map的调整会影响
ArrayList
中的第一个区域?您已将第一个
area
对象的引用复制到
map
变量。
map
现在引用了
Area
的一个实例,列表中的第一个条目(
arraylist.get(0)
)和
map.getBounds()
从同一区域获取边界。