为什么下面的代码不起作用(StringBuffer.toString!= null)

时间:2014-09-24 05:17:33

标签: java stringbuffer

我是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检查来识别它, 代码打印不是空的

为什么会这样?

3 个答案:

答案 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表示。

  

根据JLS, Section 15.18.1.1

     

如果引用为null,则将其转换为字符串“null”

隐式地,这会发生:String.valueOf(addressLineOne) //会给你一个值为“null”的字符串。

然后字符串“null”中的字符将被附加到缓冲区。

注意:另一方面,new StringBuffer().append(null);会给您一个编译错误,因为重载的append()方法的参数null不明确,String.valueOf(null) 1}}会抛出Null Pointer Exception

相关问题