有个判空操作,从某个List<实体>中拿到某个属性,然后要对它进行判空操作,因为后面要get属性,如果为空,会报空指针错误。
恰巧我还有个 赋值操作,就是get得到的这个值要赋给一个变量,拿着这个变量去跟下一次for List实体里面get到的值进行比对,这就出现问题了,我把判空的if操作与赋值的操作并列进行了,大概就是下面这个样:
for(Object obj : objs){
if(!"".equals(obj.getString()) && null != obj.getString()){
//这里的getString()代表的是实体里的某个属性
if(strChange.equals(obj.getString())) {
...//一些列操作
}
}else{
strChange= obj; //strChange是个变量
}
}
这就会出现问题了,因为判空是在else赋值之前,他们是并列关系,如果obj.getString()为空了,则会赋给strChange,
for循环下一次的时候,当obj.getString()不为空,走到
if(strChange.equals(obj.getString()))
这一步时,依然会报 空指针 错误
why??????
后来才发现,原来此时的strChange 为null,
null.equals() 这样的操作是错误的!!!!!!!!!!!
"".equals() or null == str 这样都是可以的。
所以要把if判空放在最外层,就ok了。