【发布时间】:2015-04-23 05:28:12
【问题描述】:
我不知道为什么我的代码会抛出这个错误。我有一个可以容纳 maxCapacity = 100 的通用数组,如果用 currentSize 达到这个数字,则 maxCapacity 会加倍。当我执行以下测试时,它会引发 NullPointerException。为什么?注意:我的目的是从索引 1(不是 0)开始!!!!
测试:
for(int i=1; i <= 1100; i++)
list.addLast(i);
System.out.println("Should print 1 .. i");
for(int x : list)
System.out.print(x + " ");
System.out.println("\n");
这是我的代码:
private E[] list;
private int maxCapacity, currentSize;
public ArrayLinearList(){
currentSize = 0;
maxCapacity = DEFAULT_MAX_CAPACITY;
list = (E[]) new Object[maxCapacity];
//list[0] = null;
}
public void addLast(E obj){
if(isFull()) //check if maxCap has been reached first
doubleArraySize();
System.out.println("Method called");
if(currentSize == maxCapacity - 1)
doubleArraySize();
list[++currentSize] = obj;
}
....
private boolean isFull(){
if(currentSize == maxCapacity)
return true;
return false;
}
private void doubleArraySize(){
maxCapacity *= 2;
System.out.println("doubling");
E[] valuesHolder = (E[]) new Object[maxCapacity];
for(int i = 1; i <= currentSize; i++)
list[i] = valuesHolder[i];
list = valuesHolder;
}
【问题讨论】:
-
我知道 NullPointerException 背后的概念。问题是我不知道为什么它在我的代码中这样做。
-
如果您了解 NPE 背后的概念,您应该知道如何找到异常(空对象)的起源。您没有发布异常详细信息(堆栈跟踪、代码行、空对象),因此实际上无法为您提供帮助。请再次阅读链接问题的答案。
-
This answer 处理 NPE 故障排除。
-
告诉我我是否正确,我想我可能已经找到了问题所在。我认为这是因为在测试中我试图执行
for(int x : list)代码块实际上是用于对象(使用迭代器)并且在我的循环测试中我插入原始数据(Int)而不是实际的整数对象。对吗? -
@JackGal 发布您的完整堆栈跟踪并指出导致空指针异常的代码行。
标签: java arrays generics nullpointerexception