调用没有被赋值为非null值的引用就会出现NullPointerException。要有效的减少不合理代码导致的NullPointerException,首先就要了解NullPointerException容易发生在哪些地方。
除了声明为原生类型(primitive:byte,short,int ,float,double,boolean)外,声明对象类型的变量而没有给变量初始化对象。
返回值为集合的方法没有值情况返回null值
调用方法传进的参数为null
把一个null值赋值给原生类型的变量
==判断null值或equals比较
数字转换为字符串
针对上面的情况,合理编写代码是可以减少NullPointerException的发生
声明对象,给对象初始化合理的值
如声明对象为集合类型的,初始一个空的集合
List list = Collections.emptyList();
如果知道列表的大小,就可以直接初始化指定大小的列表
List list = new ArrayList(5);
返回集合的方法在没有值得情况下返回一个空集合
public List getList(String filter) {
List list = getListInternal(filter);
if(list == null ) {
list = Collections.emptyList();
}
return list;
}
方法内对传进来的参数做非null判断,
public void doSomething(SomeObject obj){
if(obj != null){
//do something
} else {
//do something else
}
}
避免对原生类型的变量赋值为包装类型
public Integer getCount() {
Integer c = null;
//do something
return c;
}
int count = getCount();
当返回值为null,这时就会抛出NullPointerException
==判断null,变量放在比较操作符右边,字符串equals比较,变量作为参数传进
if(null == obj) {
}
boolean r = "hello".equals(str);
数字转换为字符串使用String.valueOf(),不要使用toString()方法
Integer c = getCount();
String cs = String.valueOf(c);