Java的空指针异常
本文是在写leetcode203题时出现空指针异常而对空指针异常进行研究
// leetcode 203
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyNode = new ListNode(-1);
dummyNode.next = head;
ListNode tump = dummyNode;
ListNode cur = null;
while(tump.next != null){
cur = tump;
tump = tump.next;
if(tump.val == val){
cur.next = tump.next;
tump = cur.next;
}
}
return dummyNode.next;
}
}
报错如下
java.lang.NullPointerException
at line 17, Solution.removeElements
at line 54, DriverSolution.helper
at line 87, Driver.main
对空指针异常感到难以理解,于是去查询
java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。
之所以会出现空指针异常,是因为在我的代码中,最后一次循环导致tump引用为空,tump空又使用成员变量,于是引发空指针异常