2011-11-07 9 views
5

nie jestem w stanie zrozumieć następujące zachowanie StringBuilder NULL gdy obiekty są dołączane do instancji:StringBuffer zachowanie NULL dla obiektów

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

} 

Ostatnia wypowiedź druku nie drukuje 0. Czy ktoś może mi pomóc zrozumieć zachowanie?

Odpowiedz

1

Nie można ustawić długość 0; "Przed przypisaniem wartości null" drukuje 0.

Następnie dodajemy null, który pojawi się w buforze jako ciąg "null", który ma długość cztery.

2

StringBuilder dodaje "null", gdy podajesz zerowy odnośnik. Ułatwia debugowanie. Jeśli chcesz pusty ciąg zamiast "null", przetestuj odwołanie przed dodaniem:

if (obj != null) { 
    builder.append(obj); 
}