最近Coding, 發現一個bug,沒有按照預期走到指定分支,意外發現StringBuilder.append(null)的奇怪事情
StringBuilder.append(null);
然後判斷 StringBuilder的內部狀態,是否爲空,按照常識,應該是 空 纔對,然後真實的結果如下所示
太奇怪了,StringBuilder.append(null); 結果 StringBuilder裏面 既不是null值也不是空串,而是 4個char字符長度,這是啥情況?!
判斷 StringBuilder裏面的值是否和 “null” 相等,居然是相等的。
刷新了常識,這就應該追本溯源了,看看源碼再說:
StringBuilder.append()方法,繼承了super.append()方法,不急,繼續看
原來在這裏判斷了接收的 str是否爲null, 並且返回了一個奇怪的值
看看它做了什麼操作
恍然大悟,原來返回了 “null” 這四個字符 ,原來append(null), 最終的結果是 append了一個 “null” 字符串。
小結
下次使用StringBuilder.append()的時候,在append之前記得先判斷下加入的String是否爲null,小記一下。