【问题标题】:Can someone explain why the assigned object inside forEach loop becomes null when it exits the forEach loop? [closed]有人可以解释为什么 forEach 循环中的分配对象在退出 forEach 循环时变为 null 吗? [关闭]
【发布时间】:2020-05-04 20:05:38
【问题描述】:

当我将一个对象分配给 foreach 循环中的现有对象时,它存在,但是当它退出循环时,它突然变为 null 并引发 nullpointerexception

Project project = new Project();
for (Project prjct: pps.getProjects()) {

    if (prjct.getCode().equals(projectCode)) {
       project = prjct;

       System.out.println("First occurrence : " + project.toString()); //The object is present here

    } else if (!prjct.getCode().equals(projectCode)) {
       project = null;
    }

    System.out.println("Second occurrence : " + project.toString()); //Object is also present here
}
System.out.println("Third occurrence : " + project.toString()); //Throws NullPointerException

【问题讨论】:

  • edit您的帖子并添加minimal reproducible example,以及示例输入。
  • 它应该按原样工作。我的猜测是,您在循环的最后一次迭代中进入了else if 块而没有意识到。
  • @user85421 null 部分的原因是,当我使用该对象时,我可以在使用 if 语句之前测试它是否为 null。我是新来的,所以我有很多东西要学
  • 附带问题:写 if (X) … else if (! X) … 是多余的。 else 子句要执行的唯一情况是if 条件为假。也就是说,我们知道X是假的,所以! X一定是真的,因此不需要检查! X是否是真的。因此if (X) … else … 就足够了。

标签: java object foreach nullpointerexception assign


【解决方案1】:

您将在循环的每一次通过时更新project

退出循环时它不会“突然变为空”;您在循环的最后一次将其设置为 null。

else if (!prjct.getCode().equals(projectCode)) {
    project = null;
}

不运行你的程序,prjct.getCode() 不等于projectCode 仍然很明显,因为你正在进入else if 块并设置project = null

【讨论】:

    【解决方案2】:

    没关系,我发现了问题.. 在我的 forEach 循环在 if 语句中找到正确的对象后,我应该使用中断。不知道这是可能的..我会把它留给需要它的人

    【讨论】:

    • 考虑到对您的问题的关注程度,Nevermind 听起来并不是正确的回应。这看起来像是把你引向了正确的方向。 .. 无论如何我赞成。
    猜你喜欢
    • 2019-09-14
    • 2017-06-24
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多