NULL对象的StringBuffer行为

时间:2011-11-07 18:38:08

标签: java null stringbuilder

当NULL对象附加到实例时,我无法理解StringBuilder的以下行为:

public class StringBufferTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String nullOb = null;
        StringBuilder lsb = new StringBuilder();

        lsb.append("Hello World");
        System.out.println("Length is: " + lsb.length());// Prints 11. Correct

        lsb.setLength(0);
        System.out.println("Before assigning null" + lsb.length());    
        lsb.append(nullOb);
        System.out.println("Length now is:" + lsb.length()); // Prints 4. ???
    }

}

最后一个打印声明不打印0.有人可以帮我理解这个行为吗?

3 个答案:

答案 0 :(得分:9)

来自StringBuffer API -

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html#append(java.lang.String)

  

String参数的字符按顺序追加,   通过参数的长度增加该序列的长度。   如果str为null,则附加四个字符“null”

这应该将长度解释为4。

答案 1 :(得分:2)

StringBuilder在为其提供空引用时附加“null”。它简化了调试。如果你想要一个空字符串而不是“null”,只需在追加之前测试引用:

if (obj != null) {
    builder.append(obj);
}

答案 2 :(得分:1)

不,你将长度设置为0; “在分配空”之前打印0。

然后你追加null,它将作为字符串"null"出现在缓冲区中,其长度为4。