2014-09-24 54 views
-1

我是新来的字符串世界,为什么下面的代码不工作(!StringBuffer.toString = NULL)

我已经编码为像下面,

StringBuffer buffer=new StringBuffer(); 
String addressLineOne=null; 
buffer.append(addreeLineOne); 
if(buffer.toString!=null) 
{ 
system.out.println("Not NULL"); 
} 

结果:不为空; (buffer.toString!= NULL)==真

Eventhough我已经追加空缓冲,我不能够通过具有空检查,以确定它, 打码不为空

为什么会这样呢?

+0

此代码无法编译,并且此处没有任何内容显示'StringBuffer'返回'true.' – EJP 2014-09-24 05:41:26

+0

阅读'StringBuffer'的'javadoc'['append'](http://docs.oracle.com/ javase/8/docs/api/java/lang/StringBuffer.html#append-java.lang.Object-),它指向String的javadoc。valueOf',如果你问我认为你在问什么,它应该回答你的问题。 – ajb 2014-09-24 05:41:27

+1

我认为这是一个很好的问题,除了OP的编译问题之外。 – BatScream 2014-09-24 05:52:42

回答

0
public StringBuffer append(Object obj) 

追加Object参数的字符串表示。

总的效果是完全一样如果参数是由String.valueOf方法(对象),以及该 字符串中的字符转换为 串然后追加到此字符序列

所以addressLineOne在被附加到缓冲区之前将被转换为String表示。

根据JLS, Section 15.18.1.1

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

含蓄,这种情况会发生:String.valueOf(addressLineOne) //会给您提供超值的字符串“null”在里面。

然后将字符串“null”中的字符分别添加到缓冲区中。

注意:在另一方面,new StringBuffer().append(null);会给你一个编译错误,因为超载append()方法的参数null将是明确的,并且String.valueOf(null)将抛出一个Null Pointer Exception

+0

所有人都在其他评论中说过,为什么这不会为空。 – Snorky35 2014-09-24 08:14:19

+0

true :)。但一个问题需要一个答案,我给了它一个。 – BatScream 2014-09-24 12:02:28

+0

对不起这个unusefull评论:)按没有把我放在一个新的行(oups),然后我意识到我不是在好的部分(我的评论是不适合你,但对于提出问题的人) 。 – Snorky35 2014-09-24 15:20:45

0

以下是StringBuffer中toString()的实现。

public synchronized String toString() { 
    return new String(value, 0, count); 
    } 

可以看出,它始终在呼唤新的String(),因此总是会导致非空返回

1

打印缓冲区中的if条件里面,看看自己:

if(buffer.toString()!=null){ 
    System.out.println("Not NULL: " + buffer.toString()); 
} 

输出:非NULL:空

空被作为字符串存储在缓冲区中 - 作为“null”而不是实际的空值。