Java 检查数组索引是否为null时出现NullPointerException

Java 检查数组索引是否为null时出现NullPointerException,java,nullpointerexception,stack,Java,Nullpointerexception,Stack,我试图创建一个堆栈,但遇到了这样的问题:每次我试图检查索引值时,都会得到一个NullPointerException private E[] items; public Stack(Class<E> type) { E[] items = (E[]) new Object[10]; } public boolean isEmpty(){ if(items[0] == null){ return true; } return false; }

我试图创建一个堆栈,但遇到了这样的问题:每次我试图检查索引值时,都会得到一个NullPointerException

private E[] items;

public Stack(Class<E> type) {
  E[] items = (E[]) new Object[10];
}

public boolean isEmpty(){
   if(items[0] == null){
       return true;
   }
   return false;
}
在调用isEmpty()期间


显然,我知道项[0]此时应该为null,并且希望能够根据它是否为null来执行操作,在这种情况下,由于堆栈为空,因此返回true。如何在不获取NullPointerException的情况下执行此操作?

构造函数中的行

E[] items = (E[]) new Object[10];
创建局部变量,但不初始化类字段
。使用

items = (E[]) new Object[10];

编译器将发出一个警告,指出未使用
,因此最好注意这些警告。

同样,在创建泛型类时,我建议稍微改变一下。您可以将该类声明为泛型,而不是将其作为构造函数参数传递,它的工作原理相同

public class Stack<E>
{
    private E[] items;

    public Stack() {
        items = (E[]) new Object[10];
    }

    public boolean isEmpty(){
        if(items[0] == null){
           return true;
         }
         return false;
    }

    public E push(E item){
    ...
    }

    public E peek(){
    ...
    }

    .
    .
    .
}
公共类堆栈
{
私人E[]项目;
公共堆栈(){
items=(E[])新对象[10];
}
公共布尔值为空(){
如果(项[0]==null){
返回true;
}
返回false;
}
公共电子推送(电子项目){
...
}
公共E peek(){
...
}
.
.
.
}
那么您的主类将如下所示:

    Stack<String> myStack = new Stack<String>();
    myStack.push("hi");
    System.out.println(myStack.isEmpty());
Stack myStack=new Stack();
myStack.push(“hi”);
System.out.println(myStack.isEmpty());

这更接近于java内置泛型类的约定。

items本身为空。不能引用到空数组中。
public class Stack<E>
{
    private E[] items;

    public Stack() {
        items = (E[]) new Object[10];
    }

    public boolean isEmpty(){
        if(items[0] == null){
           return true;
         }
         return false;
    }

    public E push(E item){
    ...
    }

    public E peek(){
    ...
    }

    .
    .
    .
}
    Stack<String> myStack = new Stack<String>();
    myStack.push("hi");
    System.out.println(myStack.isEmpty());