为何JDK 7新增Objects.toString方法?其与String.valueOf功能一致
JDK 7引入Objects.toString及其重载方法,虽然内部直接调用String.valueOf、行为完全一致,但主要是为了优化开发者的编码体验和代码组织逻辑,具体原因有这几点:
统一空安全工具类的生态
Objects类是JDK 7专门新增的空安全工具集合,里面集中了isNull、nonNull、requireNonNull等一系列处理对象空值的方法。把toString方法归到这里,能让开发者在处理对象空值相关操作时,统一从同一个工具类调用,不用在String类和Objects类之间来回切换,代码风格更统一,也符合工具类的集中设计原则。直接提供自定义默认值的便捷重载
String.valueOf处理null时只会返回固定的"null"字符串,如果想要自定义默认值,得自己写三元表达式:obj == null ? "默认值" : obj.toString()。而Objects.toString(obj, "默认值")直接封装了这个逻辑,不用重复写空判断代码,减少冗余,也避免手动写判断时出错。泛型场景下的语义更贴合
当处理泛型对象时,Objects.toString的泛型重载方法(<T> String toString(T o))从语义上更贴合“处理任意对象”的场景,代码可读性更强。虽然String.valueOf也能处理泛型对象,但Objects作为对象工具类,调用起来更符合直觉。
简单来说,这个新增方法不是为了实现新功能,而是为了让对象字符串转换的操作更贴合JDK的工具类体系,同时提供更便捷的重载,提升编码效率和代码整洁度。
内容的提问来源于stack exchange,提问作者Carl Mastrangelo

