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作为空字符串,而应该使用””。

 

版权声明:本文为kylne原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kylne/p/12711350.html