当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.有人可以帮我理解这个行为吗?
答案 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。