String字符串判空陷阱!!!!!

有个判空操作,从某个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了。

猜你喜欢

转载自blog.csdn.net/alinekang/article/details/80770657