我遇到了在类中循环使用带有对象的数组的问题。我在这里写了一个小演示,所以你可以关注:
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。该方法采用数组并循环遍历它。然后我想对每个不是当前班级实例的坦克做一些事情。我希望你能从我的代码和这个描述中理解。
问题是我得到if (tanks[i].equals(this))
我在这里做错了什么?
答案 0 :(得分:8)
这意味着tanks[i]
为空。 (或者被覆盖的equals()
方法有错误)
你需要检查一下。
答案 1 :(得分: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
正在发生的地方。另一种可能性是,您的简单示例无法准确反映您的错误发生的位置。
答案 2 :(得分:1)
如果您想比较对象的ID,可以使用==
代替.equals()
doStuff(Tank tanks) {
for (int i = 0; i < tanks.length; i++) {
if (tanks[i] == this) {
continue;
}
// Do stuff
}
}