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作為空字符串,而應該使用""。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM