我有一个简短的问题,请告诉我为什么第一个示例不起作用而第二个示例起作用。 示例之前的代码:
Tiles[] myTiles = new Tile[23];
number = 1;
第一个例子:
for(Tile tile : this.myTiles) {
if (number != this.myTiles.length) {
tile = new Tile(number, getResources().getColor(R.color.puzzle_default));
number++;
}
}
第二个例子:
for(Tile tile : this.myTiles) {
if (number != this.myTiles.length){
this.myTiles[number-1] = new Tile(number, getResources().getColor(R.color.puzzle_default));
number++;
}
}
如果我在类中的其他方法中使用下面的代码
this.myTiles[0].getNumber();
这是 NullPointerException。
但对于第二个示例来说,效果很好。
我真的不知道为什么。感谢您的回复
最佳答案
第一个循环创建每个对象的副本,相当于
for (int i=0; i < myTiles.length; i++) {
Tile tile;
...
tile = new Tile(...); // set local reference only
}
由于对象数组中的元素默认为 null
,因此这些元素在循环范围之外将保持未分配状态。 myTiles
的原始元素保留其默认 null
值
关于java - Java 特定的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838871/