0

我在类内循环遍历带有对象的数组时遇到了一些麻烦。我在这里写了一个小演示,所以你可以关注:

Tank tanks[] = new Tank[2];
tanks[0] = new Tank();
tanks[1] = new Tank();
tanks[0].doStuff(tanks);

doStuff(Tank[] tanks) {
    for (int i = 0; i < tanks.length; i++) {
        if (tanks[i].equals(this)) continue;
        // Do stuff
    }
}

所以,我有一个类型为 Tank 的数组。然后我在 Tank 类中调用方法 doStuff。该方法获取数组并循环遍历它。然后我想对每个不是当前类实例的坦克做一些事情。我希望你能理解我的代码和这个描述。

问题是我得到 nullPointerExceptionif (tanks[i].equals(this))

我在这里做错了什么?

4

3 回答 3

8

这意味着它tanks[i]是空的。(或者您的覆盖equals()方法有错误)

你需要检查一下。

于 2013-05-08T15:44:55.727 回答
1

当我运行此代码时:

public class Tank {
  public static void main(String[] args) {
    Tank tanks[] = new Tank[2];
    tanks[0] = new Tank();
    tanks[1] = new Tank();
    tanks[0].doStuff(tanks);
  }

  public void doStuff(Tank[] tanks) {
      for (int i = 0; i < tanks.length; i++) {
          if (tanks[i].equals(this)) continue;
          // Do stuff
      }
  }
}

没有错误发生。因此,您可能已经覆盖.equals了 ,这NullPointerException就是发生的地方。另一种可能性是您的简单示例无法准确反映您的错误发生的位置。

于 2013-05-08T15:46:35.783 回答
1

如果你想比较你的对象的 ID,你可以使用==而不是.equals()

doStuff(Tank tanks) {
  for (int i = 0; i < tanks.length; i++) {
    if (tanks[i] == this) {
        continue;
      }
    // Do stuff
  }
}
于 2013-05-08T15:47:25.390 回答