我是String World的新手,
我编码如下,
StringBuffer buffer=new StringBuffer();
String addressLineOne=null;
buffer.append(addreeLineOne);
if(buffer.toString!=null)
{
system.out.println("Not NULL");
}
结果:不是空的; (buffer.toString!= NULL)== TRUE
虽然我已将null追加到缓冲区,但我无法通过NUll检查来识别它, 代码打印不是空的
为什么会这样?
答案 0 :(得分:1)
在if条件中打印缓冲区并自行查看:
if(buffer.toString()!=null){
System.out.println("Not NULL: " + buffer.toString());
}
输出:非空:null
Null在缓冲区中以字符串形式存储 - 为“null”而不是实际的null。
答案 1 :(得分:0)
以下是StringBuffer中toString()的实现。
public synchronized String toString() {
return new String(value, 0, count);
}
可以看出,它总是调用new String()因此总是会导致非null返回
答案 2 :(得分:0)
public StringBuffer append(Object obj)
追加Object参数的字符串表示形式。
整体效果就像参数转换为a一样 字符串由String.valueOf(Object)方法和字符组成 然后将该字符串附加到此字符序列
所以addressLineOne
将被附加到缓冲区之前转换为String
表示。
隐式地,这会发生:如果引用为null,则将其转换为字符串“null”
String.valueOf(addressLineOne)
//会给你一个值为“null”的字符串。
然后字符串“null”中的字符将被附加到缓冲区。
注意:另一方面,new StringBuffer().append(null);
会给您一个编译错误,因为重载的append()
方法的参数null
不明确,String.valueOf(null)
1}}会抛出Null Pointer Exception
。