最近在項目中遇到一個拼接字符串的問題。

由於地址和學校類型是多選的,當初存放的時候存放在關聯表里面,現在需要通過前端傳的關聯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作為空字符串,而應該使用""。
