2015-02-22 5 views
-1
class Test { 
    public static void main(String args[]) { 
     StringBuilder sb = new StringBuilder("123"); 

     System.out.println(sb + "_"); //123_ // expected ouput 

     sb.setLength(2); 
     System.out.println(sb + "_"); //12_ // expected output 

     sb.setLength(3);  
     System.out.println(sb + "_"); //12 // no underscore ???? 
    } 
} 

Я не понимаю, почему последний вывод этого Java-кода не содержит символ undercore. Может ли кто-нибудь объяснить? Спасибо за помощь.StringBuilder setLength()

+3

Вы читали, что делает setLength? http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#setLength%28int%29 –

+0

Поскольку метод 'setLength()' добавил нулевой символ, то есть '\ u0000' –

+0

Почему вы вызываете 'setLnegth', а затем добавляете? .. – Maroun

ответ

0

Нулевой символ является зарезервированным символом, который указывает конец строки, поэтому, если вы печатаете что-то, за которым следует \ u0000, ничего больше после его распечатки.

Ответ здесь Why stringbuilder stops adding elements after using the null character?

+0

Это не происходит в моей среде Eclipse Java 8 ..... Я читаю руководство и не верю. Что-то не так. Я согласен с вами, но компилятор делает что-то другое. –

0

Когда я исполняю свой код, мой вывод следующий

123_ 
12_ 
12_ 

Что кажется более логичным для меня, как и

System.out.println(sb + "_"); 

сначала вычисляет sb.toString(), а затем объявления «_» в результирующую строку.

В качестве примера возьмем следующие строки:

String a = sb + "_"; // This line compiles 
StringBuffer a = sb + "_"; // This line does not compile 

Вторая строка показывает ошибка «не удается преобразовать из строки в StringBuffer», и, как вы можете видеть результат добавления строки в StringBuffer с помощью оператором + является String.