为什么Boolean.valueOf(String)传入非true/false的随机字符串时返回false?
核心原因
Boolean.valueOf(String) 从API设计层面就不存在抛出IllegalArgumentException的逻辑,对这个方法的行为预期和实际实现完全不符。
这个方法的底层解析逻辑非常宽松,核心规则只有两条:
- 当传入的字符串不为
null,且*不区分大小写完全匹配"true"*时,返回true - 其余所有输入,包括
null、空字符串、"false"、任意随机字符串,统一返回false
它的JDK源码实现全程没有任何参数合法性校验抛错的逻辑:
public static Boolean valueOf(String s) { return parseBoolean(s) ? TRUE : FALSE; } public static boolean parseBoolean(String s) { return ((s != null) && s.equalsIgnoreCase("true")); }
因此try块里的代码永远不会触发异常,catch块自然永远无法执行。
严格校验的修正方案
如果要实现“输入既不是true也不是false时抛出异常、打印错误日志”的逻辑,不能直接依赖Boolean.valueOf,需要自行增加严格判断逻辑,参考代码如下:
boolean a; String b = "randomTextThatsNotTrueOrFalse"; try{ if ("true".equalsIgnoreCase(b)) { a = true; } else if ("false".equalsIgnoreCase(b)) { a = false; } else { throw new IllegalArgumentException(); } } catch(IllegalArgumentException e) { LOG.error(b + "is invalid. Only true or false are possible Options."); }
内容的提问来源于stack exchange,提问作者anfenger
相关产品推荐
相关产品推荐

