版权声明:本文章为原创文章,未经允许不得转载 https://blog.csdn.net/sinat_41815248/article/details/85985033
空指针 java.leng.NullPointerException
常见的几种原因是:
1.对象未初始化而直接引用对象值或者方法。
2.对象引用已经不存在或者被JDBC关闭。
一个经典的例子是JDBC connection已经关闭,ResultSet对象仍然被使用中,这个时候NullPointerException就被抛出。
3.违反某些Java容器的限制,读写Null 值。
4.例如 java.util.HashTable,它不接受Null 作为Key或者Value,如果试图用Null作为Key去读取HashTable将会得到NullPointerException。
Java NullPointerException做为Java Runtime 异常,在开发中减少这样错误的发生就是对代码完成Junit的单元测试,对于一些重要的代码要提高code review的次数从而提高代码质量。
在leetcode刷题时有时会遇到这个异常,后来发现了错误所在:
872. 叶子相似的树
请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。
给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。
如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。
如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。
自己的答案(4ms)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
List<Integer> a=new ArrayList<>();
List<Integer> b=new ArrayList<>();
leaf(root1,a);
leaf(root2,b);
if(a.size()!=b.size()) return false;
for(int i=0;i<a.size();i++){
if(a.get(i)!=b.get(i)) return false;
}
return true;
}
public void leaf(TreeNode root,List<Integer> list){
if(root!=null) { //由于函数无定义返回类型,不可写作if(root==null) ;
//接着又if (root.left==null&&root.right==null) list.add(root.val); 这样会出现空指针异常
if(root.left==null&&root.right==null) list.add(root.val);
leaf(root.left,list);
leaf(root.right,list);
};
}
}