StringBuffer和StringBuilder添加null值的誤導
讓我們來看看這段代碼:

















結果是什么呢?



讓我們來看看append方法的源碼就知道了.
StringBuilder:












StringBuffer的append方法是在它的父類中實現的:












這兩個append方法都有共同的:


null了.
而"null"這個字符串的長度自然是4了.
我的漫漫程序之旅專注于JavaWeb開發
隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
|
StringBuffer和StringBuilder添加null值的誤導讓我們來看看這段代碼: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 結果是什么呢? ![]() ![]() ![]() 讓我們來看看append方法的源碼就知道了. StringBuilder: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() StringBuffer的append方法是在它的父類中實現的: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 這兩個append方法都有共同的: ![]() ![]() null了. 而"null"這個字符串的長度自然是4了. 評論# re: StringBuffer和StringBuilder添加null值的誤導 回復 更多評論這個正常第一沒有人有意會往其中 append 一個 null 第二程序執行中 append 一個 null,顯示出來是個 null 不正好讓我們能知道中間發生了什么事嗎? 就像 String s = null; System.out.println(s); 輸出 null 一樣。
2008-05-11 20:57 | 隔葉黃鶯
# re: StringBuffer和StringBuilder添加null值的誤導 回復 更多評論個人認為throw nullpointexception更為合理,一般來說null是沒有任何意義的。
2008-05-11 22:40 | 三人行,必有我師焉
# re: StringBuffer和StringBuilder添加null值的誤導 回復 更多評論哈哈,這么實現也是沒辦法的事。樓主可以想象,如果是你實現append方法,你會怎么做呢。append(null) 會將null做如何處理呢?我想大多數人可能都會給出三種處理方案: 1. 直接返回null。一般來講,append方法都是返回一個StringBuilder對象,所以返回null,有些不符合append的設計思想。 2. 什么都不做,返回原來的StringBuilder對象。這么做似乎合理,但是往StringBuilder里放null,總得和往里放空串有點區別吧。所謂人過留名,雁過留聲。所以這種看似合理的方法卻不太好。 3. 這種方案就是現在append方法的實現方案了,將null變成"null"。 因此,將null變成"null"是最佳的方案。
2008-05-11 22:43 | 銀河使者
|
||||||||||||||||||||||||||||||||||||||