JAVA的字符串拼接 null和""的区别
最近在项目中遇到一个拼接字符串的问题。
由于地址和学校类型是多选的,当初存放的时候存放在关联表里面,现在需要通过前端传的关联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作为空字符串,而应该使用””。