# Java 对象如何安全的 toString

**URL:** <https://www.isharkfly.com/t/java-tostring/14000>\
**Category:** 程序语言\
**Tags:** java\
**Created:** [June 9, 2022, 4:58am UTC](https://www.isharkfly.com/t/java-tostring/14000 "2022-06-09T04:58:46Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [June 9, 2022, 4:58am UTC](https://www.isharkfly.com/t/java-tostring/14000/1 "2022-06-09T04:58:46Z")

</div>

如果我们的对象为空对象的时候，我们再使用 toString() 方法，我们将会得到空对象的异常。

这个对象有可能就是 String 对象，也有可能是其他的对象。

如下面的 2 行语句：

```auto
        Object obj = null;
        obj.toString();

```

如果你执行上面 2 行语句的话，铁定会抛出下面的空对象异常。

 ![2022-06-09_00-59-18](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/a/aa5f8799d15fb83229569e031d12def43c6467ee.png)

如何让 Java 能够 toString 又不抛出异常呢？

## 解决方法

我们可以使用 Apache commons.lang3 提供的 toString() 方法。

如下面显示的使用用例：

```auto
       Object obj = null;

        ObjectUtils.toString(obj, StringUtils.EMPTY);
        ObjectUtils.toString(obj, ()->StringUtils.EMPTY);

```

如果我们输入的对象为 NULL 的话，上面的语句将会输出一个指定的字符串而不抛出空异常。

需要注意的是写法：

`ObjectUtils.toString(obj, StringUtils.EMPTY);`

Apache commons.lang3 项目官方提示这个方法将会在后续的版本中被丢弃。

原因是这个方法已经被 java.util.Objects.toString(Object, String) 方法替代了。

 ![2022-06-09_01-09-43](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/9/975d0659203cbaa291352d1a63e02a1e644f66f9.png)

如果你使用的是 Java 7 以上版本的话，建议你使用 java.util.Objects.toString 方法。

你可以简单的 Objects.toString 就可以了：

```auto
        assertThat("null").isEqualTo(Objects.toString(obj));
        assertThat("").isEqualTo(Objects.toString(obj,StringUtils.EMPTY));

```

对比上面 2 个方法的不同，第一个方法是如果为 Null 的话，就直接输出字符串 null。

第二个方法是如果为空的话，将会用另外一个字符串去替换。

## 总结

通过上面的代码和用例，我们对在对象 toString 的时候可能出现的 Null 对象异常情况进行了解说。

并且展示了可以使用的一些方法。

### 测试源代码

相关的测试源代码，请访问链接：

> **[iSharkFly SRC](https://src.isharkfly.com)**
>
> Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go

您也可以 Fork 代码后提交更新。
