2014-09-24 60 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」而不是實際的空值。

相關問題