今天在公司调了一个很久的错,也许说到底是出于自己的粗心。
先看段代码:
String id = params.get("id")+"";
if (null==id||"".equals(id.trim())) {
//id 为空的时候
..................
}else{
...................
}
就看这段代码会有什么错呢,我当时想了很久也想不出来。可是id为空的时候总是进入了 else 块,if (null==id||"".equals(id.trim())) 的错在哪里呢?
其实代码是没有错的,错在的是细节 。我从页面传回后台一个id ,id是放在Map中的,Map<String,Object> params。于是我作了这样的操作:String id = params.get("id")+""; 之所以取得id后加上了“”本想作为一种转换,要是使用 String id = (String)params.get("id") 那可能就不会有这样的故事发生了。
好吧回到这故事上:前台有时候是不把id传回来的,也就是说 params.get("id")可能会拿到一个 null 值。按道理 null值和空的字符串" "我都已经处理了,怎么就不是我要的结果呢。这时候我进行调试 ,也用打印出来的方法在 控制台输出:但悲哀的是 你看到 debug中的变量时null 输出来的也是null 。问题继续。
结果:其实后来的发现是 null+""="null" 也就是说 此时的 id =" null"; if (null==id||"".equals(id.trim()))判断当然为假了 ,控制台输出的当然也为 null。但是debug变量 是"null",这是我的粗心,后来才发现的。
结论:喜欢在后面加上双引号直接转换成String类型的 朋友要多加留意下吧,写代码晕菜的时候,这就是一个致命的 错。