Apache Commons Lang 是一个高价值的 Java 工具库,值得引入——它提供 StringUtils、ObjectUtils、NumberUtils 等类,安全处理字符串判空、对象比较、数字转换等高频易错操作,显著规避 NullPointerException 和 NumberFormatException。

Apache Commons Lang 是什么,值不值得引入
它不是 JDK 自带的,但几乎每个 Java 项目都该用——尤其是处理字符串、数字、对象判空、日期格式化这些高频又易错的操作。StringUtils、ObjectUtils、NumberUtils 这些类能直接避开 NullPointerException 和 NumberFormatException 的坑,比手写 if (str != null && !str.trim().isEmpty()) 清晰安全得多。
引入成本极低:
注意必须用org.apache.commons commons-lang3 3.14.0
commons-lang3(不是 commons-lang),后者已停止维护,且包名是 org.apache.commons.lang,和 3.x 的 org.apache.commons.lang3 不兼容。
字符串判空与安全截断:别再用 == null + length() 了
StringUtils 提供真正语义化的空判断:isBlank() 同时覆盖 null、空字符串、纯空白字符;isEmpty() 只判 null 或长度为 0。两者行为差异大,选错会导致逻辑漏洞。
截断字符串也常被忽略边界:手动 substring(0, 10) 在长度不足时抛 StringIndexOutOfBoundsException,而 StringUtils.substring(str, 0, 10) 安全返回原字符串。
-
StringUtils.isBlank(null)→true -
StringUtils.isBlank(" \t\n")→true -
StringUtils.substring("abc", 0, 10)→"abc"(不抛异常) -
"abc".substring(0, 10)→ 抛异常
对象工具类:equals、hashCode、toString 的标准化写法
手写 equals() 容易漏掉 null 检查或类型判断,ObjectUtils.equals(a, b) 内部已处理所有边界:null 对 null 返回 true,任一为 null 返回 false,其余调用对象自身的 equals()。
立即学习“Java免费学习笔记(深入)”;
ObjectUtils.toString(obj) 比 obj.toString() 安全,null 输入返回空字符串而非异常;ObjectUtils.defaultIfNull(obj, defaultValue) 是三元表达式的优雅替代。
生成 toString() 推荐用 ToStringBuilder.reflectionToString(this),自动遍历所有字段,避免漏字段或拼错名。
数字转换与默认值:NumberFormatException 的终结者
Integer.parseInt("abc") 直接炸;NumberUtils.createInteger("abc") 返回 null;NumberUtils.toInt("abc", -1) 返回默认值 -1。三者适用场景不同:
- 需要明确失败信号 → 用
createXxx()(返回null) - 必须有 fallback 值 → 用
toXxx(str, defaultValue) - 想保留原始异常信息 → 还是用 JDK 原生,但要 try-catch
NumberUtils.isCreatable("123.45") 返回 true,但 createDouble("123.45") 才真转;注意 isNumber() 判的是“是否符合数字字面量语法”,不是“能否转成某类型”。
复杂点在于浮点精度和科学计数法支持——NumberUtils 全部兼容,但 JDK 原生 Double.parseDouble() 对 "1e2" 支持,对 "1.2e-3" 也支持,NumberUtils 行为一致,无需额外适配。









