在for循环结束后,分配给for循环内的Java列表的值将被相同的对象(索引为0的对象)替换

在for循环结束后,分配给for循环内的Java列表的值将被相同的对象(索引为0的对象)替换,java,list,object,for-loop,arraylist,Java,List,Object,For Loop,Arraylist,我正在for循环中创建一个对象,并将其添加到列表中,如下面的代码所示。当记录在for循环中时,这些值是不同的,只要循环结束,我就会重新打印列表,我看到所有的值都是相同的。不确定代码中出了什么问题 private class PageTablesAreas{ Page page; List<Rectangle> areas; public PageTablesAreas(Page page,List<Rectangle> ar

我正在for循环中创建一个对象,并将其添加到列表中,如下面的代码所示。当记录在for循环中时,这些值是不同的,只要循环结束,我就会重新打印列表,我看到所有的值都是相同的。不确定代码中出了什么问题

private class PageTablesAreas{
        Page page;
        List<Rectangle> areas;
        public PageTablesAreas(Page page,List<Rectangle> areas){
            this.page = page;
            this.areas = areas;
        }

        public Page page(){
            return this.page;
        }

        public int getPageNumber(){
            return this.page.getPageNumber();
        }

        public List<Rectangle> areas(){
            return this.areas;
        }
    }
private类pageTables区域{
页码;
列出区域;
公共页面区域(页面、列表区域){
this.page=page;
这个面积=面积;
}
公共网页{
返回此.page;
}
public int getPageNumber(){
返回此.page.getPageNumber();
}
公共列表区域(){
将此文件返回到其他区域;
}
}

List pageTableAreas=新建ArrayList();

对于(int i=FIRST_PAGES.length+1;iRectancle是一个对象。如果您修改矩形,那么您将修改它的一个实例,因为您将引用传递给函数,而不是像使用int这样传递“值”的副本

代码中没有新的矩形(…),这就是为什么我假设您没有在fineTuneArea(…)中创建新的矩形

例如,如果您有如下内容:

Rectangle r = new Rectangle(10, 10);
modifyWidthLenghtTo100(r);

System.out.println(r.getWidth()) will print 100 
内部循环打印之所以有效,是因为您打印了结果,在下一个循环中,您覆盖了上一个结果并打印了实际结果。在外部循环中,您打印每个结果并查看每个操作的最终结果


Tom的评论也是正确的。如果你有一些静态变量,它们在你创建的每个矩形中都存在一次。

因为你的内部循环只打印最后添加的项目,你没有注意到这个项目“覆盖”了以前的所有项目。你可以通过打印循环中的第一个项目来检查。它应该一次又一次地打印相同的项目(因为它总是第一个,不应该改变),但它将产生与您当前输出中相同的结果,因为第一项被修改。任何对象
fineTuneArea
返回的,其属性可能是
static
,如果这有助于您接受我的答案和/或向上投票。谢谢Charlie。这就是我要找的。
Rectangle r = new Rectangle(10, 10);
modifyWidthLenghtTo100(r);

System.out.println(r.getWidth()) will print 100