我有这段代码:
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为什么。
答案 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
如果证明了这一点,那么你可以深入研究为什么语法不能很好地链接在一起。