2011-11-07 27 views
5

Tôi không thể hiểu được hành vi sau đây của StringBuilder khi đối tượng NULL được nối vào một ví dụ:StringBuffer hành vi cho các đối tượng NULL

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. ??? 
    } 

} 

Tuyên bố cuối cùng in không in 0. ai có thể vui lòng giúp tôi hiểu hành vi?

Trả lời

9

Từ API StringBuffer -

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html#append(java.lang.String)

Các nhân vật của các đối số chuỗi được nối, theo thứ tự, tăng chiều dài của chuỗi này bằng chiều dài của đối số. Nếu str là null, thì bốn ký tự "null" được nối thêm.

này nên giải thích theo chiều dài như 4.

+0

D *** shoud đã đọc tài liệu để nối thêm (Chuỗi). Cảm ơn !! –

1

Không, bạn thiết lập độ dài 0; bản in "Trước khi ấn định null" 0.

Sau đó, bạn thêm null, sẽ xuất hiện trong bộ đệm dưới dạng chuỗi "null", có chiều dài là bốn.

2

StringBuilder nối thêm "null" khi bạn cung cấp cho nó tham chiếu null. Nó giúp gỡ lỗi. Nếu bạn muốn một chuỗi rỗng thay vì "null", chỉ cần kiểm tra tham chiếu trước khi thêm:

if (obj != null) { 
    builder.append(obj); 
} 
Các vấn đề liên quan