从接口取回的 status 和常量 SUCCESS 用 == 比较返回 false,日志里两个值打印出来完全一样,分支一直走不进成功逻辑。乍看像缓存或者权限的锅,追下去往往不是。

"SUCCESS".equals(status)
Objects.equals(status, "SUCCESS")
javac -Xlint:all Main.java

追下去是这么回事:== 比的是对象引用,new String 或拼接产生的对象不在常量池里,地址自然不同。字符串内容比较要用 equals。

「Java 字符串 ==」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,全部改成 equals 或 Objects.equals;常量放左边 避免空指针;忽略大小写用 equalsIgnoreCase;用 IDE 检查打开字符串 == 的告警。

验收就看一点,分支能正常进入成功逻辑 代码扫描不再报字符串引用比较。

作者 9823189