Java 空对象的StringBuffer行为

Java 空对象的StringBuffer行为,java,null,stringbuilder,Java,Null,Stringbuilder,当将空对象附加到实例时,我无法理解StringBuilder的以下行为: public class StringBufferTest { /** * @param args */ public static void main(String[] args) { String nullOb = null; StringBuilder lsb = new StringBuilder(); lsb.append("

当将空对象附加到实例时,我无法理解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. ???
    }

}

最后一条print语句不打印0。有人能帮我理解这个行为吗?

来自StringBufferAPI-

字符串参数的字符按顺序追加, 将此序列的长度增加参数的长度。 如果str为null,则添加四个字符“null”


这应该解释为4的长度。

否,您将长度设置为0;“分配null之前”打印0

然后追加
null
,该字符串将作为长度为4的字符串
“null”
显示在缓冲区中。

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

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

D***应该阅读附加(字符串)的文档。谢谢