最近在项目中遇到一个拼接字符串的问题。

由于地址和学校类型是多选的,当初存放的时候存放在关联表里面,现在需要通过前端传的关联id获取到具体信息存入到一个字段里,用逗号分隔。
刚开始的时候定义了两个字符串address和schoolType 的null字符串去,然后去拼接字符串,但是拼接出来的字符串为"null123,124",并不是预期的"123,124",但是为什么会多一个null,
有些不理解,因为定义的address和schoolType是null,并没有对象啊,所以就怀着寻找原理的心态去查找。
首先先写一个测试类,如下:

输出结果是:

然后将address初始化值设为"":

输出结果是:

这才是符合预期的结果。
查看String的源码,源码中这样一个函数:

我们可以看到,String将null对象转为了"null"字符串,所以拼接起来的值会有null。
源码的注释中有一段

说的是String的字符串拼接+用的是StringBuilder或StringBuffer的append方法。
继续往下看,这是StringBuffer的append方法:

这是StringBuilder的append方法

我们可以看到,两者都是继承了父类的append方法。这两个类都是继承的AbstractStringBuilder类。


而AbstractStringBuilder类里的append方法是:

如果说我们拼接的字符串也是一个null对象,也会将其转为“null”:

所以,我们在拼接字符串的时候,不能使用null作为空字符串,而应该使用""。
