Java中用不建议用等于=号判断字符串相等

😂 这篇文章最后更新于1545天前,您需要注意相关的内容是否还可用。

同事写的代码

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!