同事写的代码
dealParam(queryCondition.get("creatDate"))!=""
我用 debug 模式看左边运算结果是 "",按理说这个条件判断应该为 false,但结果却是 true。但很迷的是,虽然条件成立,但条件内代码在本地环境下却没执行 (jdk8),而在测试机器上却执行了。后用 equals 解决这个问题,至于问题原因可以一起探究下。
该 queryCondition 为 SpringMVC 接收的 Map<String,Object> 数据,前端传了个 &creatDate= 的空参数,如果后台接收到是 "" 的话那下列输出肯定为 false
场景还原:
public static void main(String[] args) { Map<Object, Object> queryCondition = new HashMap<>(); queryCondition.put("creatDate",new String()); System.out.println(dealParam(queryCondition.get("creatDate"))!=""); } private static String dealParam(Object obj) { String str = ""; if (obj == null) { return str; } try { str = obj.toString(); } catch (Exception e) { e.printStackTrace(); } return str; }
但实际后台输出为 true,如此反推,那 creatDate 对于前台传的空参,接收的并不是一个字符串了,而是一个对象,因此返回为 true!