2016-01-21 3 views
0

общественного класса TestMyStringBuilderII {StringBuilder() против StringBuilder (нуль) против StringBuilder ("")

public static void main(String[] args) { 
    StringBuilder sb = new StringBuilder("Hello"); 
    StringBuilder sb1 = new StringBuilder("World"); 
    StringBuilder sb2 = new StringBuilder(); 
    //StringBuilder sb3 = new StringBuilder(null); 
    StringBuilder sb4 = new StringBuilder(""); 

    System.out.println(sb); 
    System.out.println(sb.length()); 
    System.out.println(sb.append(sb1)); 
    System.out.println(sb.append(sb2)); 
    //System.out.println(sb.append(sb3)); 
} 

}

Барьер SB3 = новый StringBuilder (нуль) приводит к NullPointerException. Теперь, в чем разница между StringBuilder(), StringBuilder ("") и StringBuilder (null)?

a) System.out.println (sb2); печатает пустое пространство, когда ожидается, что фактические символы («нуль») будут добавлены (в соответствии с определением AbstaractStringClass) - почему?

b) System.out.println (sb2.length()); является печать 0, так как это потому, что sb не является действительно «нулевым» (это означает, что это какая-то вещь/тип с длиной нуля?)

c) System.out.println (sb4); печатает пустое пространство и System.out.println (sb4.length()); является печать 0 (предполагая, что sb4 фактически является строкой из-за двойных кавычек, используемых для аргумента, но с нулевой длиной) - правильно?

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

+0

Совершенных, все четыре ответов ниже имеет смысла.Спасибо всем –

ответ

1

new StringBuilder() и new StringBuilder("") эквивалентны; они создают пустой StringBuilder без содержания, а не StringBuilder, содержащий null в любом смысле. Я считаю, что это отвечает на все три вопроса.

+0

спасибо, имеет смысл. –

4

new StringBuilder("abc") является перегрузка удобство для new StringBuilder().append("abc") кроме того, что Javadoc говорит:

Начальная емкость строкового строитель 16 плюс длина строки аргумента.

Это предназначено для создания более крупного исходного массива для улучшения производительности, хотя это, вероятно, незначительное.

Поскольку вы не можете взять длину нулевого значения, вы получите NullPointerException.

+0

+1, кроме того, исходный код помогает выявить эти тайны http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java – LordAnomander

0
  • а) System.out.println(sb2); печатает ничего (даже не пустое пространство), потому что StringBuilder пуст.
  • b) печатает ноль, потому что StringBuilder пуст (длина содержит String = 0).
  • c) ничего не печатает, потому что ничего не было добавлено.
0

StringBuilder() и StringBuilder ("") делают то же самое.

В то время как StringBuilder() вызывает только super (16), где он инициализирует массив символов длиной 16, StringBuilder ("") добавляет длину от "" до 16, а затем вызывает super, который выглядит следующим образом: super (str.length() + 16). Итак, оба возвращают вам инициализированный объект StringBuilder.

StringBuilder (нуль) падает из-за супер (null.length() + 16)

Смежные вопросы