将对象添加到arraylist会导致对象的字段变为null

时间:2015-09-23 18:06:47

标签: java arraylist null

我有这段代码:

    blocks.clear();
    if(onStart.parts==null){System.out.println("null before");}
    blocks.add(onStart);
    if(blocks.get(0).parts==null){System.out.println("null after");}

其中blocks是初始化的ArrayList<Block>,而parts是ArrayList<BlockPart>类型的块的字段。出于某种原因,该代码段仅输出“null after”。为什么parts字段变为null?

编辑:我添加了以下代码:

    System.out.println(blocks.get(0)==onStart?"same":"not same");
    System.out.println(blocks.get(0).parts==onStart.parts?"same":"not same");

输出现在是:

same
not same

奇怪的是,null after不再出现在控制台中。

编辑2:用名称替换部件只会显示null after。我不知道为什么部分字段的问题以某种方式固定自己。在此之前,我将部件字段设为最终,但随后从中删除了最终修改器,因为我以为我可能希望稍后更改.parts。现在,它修复了自己。 IDK为什么。

1 个答案:

答案 0 :(得分:0)

你的最后陈述:

System.out.println(blocks.get(0)==onStart?"same":"not same");
System.out.println(blocks.get(0).parts==onStart.parts?"same":"not same");

意味着您的语法中的某些内容正在改变对象的访问方式。打破第二个:

Block newblock=blocks.get(0)

然后如果newblock == onStart,则newblock.parts必须== onStart.parts

如果证明了这一点,那么你可以深入研究为什么语法不能很好地链接在一起。