最近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,小记一下。