Когда я создаю новую строку в Java, она инициализируется нулем или ""? - PullRequest
15 голосов
/ 11 мая 2010

Вот мой тестовый код:

String foo = new String();
System.out.println(foo);

Выходные данные пустые и записывается новая строка. Поскольку я новичок в Java, я не знаю, сделал ли он строку "", или нули обрабатываются как пустые строки.

Ответы [ 5 ]

23 голосов
/ 11 мая 2010

Строка инициализируется без символов или "" внутри.

public String() {
    this.offset = 0;
    this.count = 0;
    this.value = new char[0];
}

Приведенный выше источник взят из исходного кода Java. Как указывал другой автор, ссылки могут быть либо нулевыми, либо указывать на объект. Если вы создадите объект String и получите ссылку, указывающую на него, эта ссылка не будет нулевой.

8 голосов
/ 11 мая 2010

«ноль» - это значение для переменной, а не значение для строки. «foo» может иметь нулевое значение, но фактическая строка не может. Что вы сделали, это создали новую пустую строку (как сказано в документации для конструктора) и присвоили ее foo.

4 голосов
/ 11 мая 2010

new String () создает строку нулевой длины. Если вы просто сказали "String Foo;" как переменная-член, она будет инициализирована нулем. Если вы говорите "String Foo;" как переменная функции, она не определена и выдаст ошибку компиляции, если вы попытаетесь использовать ее без присвоения значения.

3 голосов
/ 11 мая 2010

Инициализируется с "" (пустая строка)

public class StringTest {
    public static void main( String [] args ) {
        System.out.println( "".equals(new String()));
    }
}

печать:

true
1 голос
/ 11 мая 2010

Новая строка печатается, потому что вы вызвали метод println (), который печатает строку после печати любого аргумента, который вы передали. new String () вернет "".

...