Вопрос по строковой операции - PullRequest
0 голосов
/ 11 ноября 2009

Мое понимание java String не так, когда я вижу этот код. Я не уверен, как это происходит. Кто-нибудь может объяснить, почему это так?

public class NewClass {
    public static void main(String[] args) {
        String str=null;

        System.out.println(str+"Added");
    }
}

Выход: nullAdded

Ответы [ 5 ]

11 голосов
/ 11 ноября 2009

Конкатенация строк обрабатывает нулевую ссылку, как если бы она была "нулевой" в Java. Из документов для StringBuilder.Append(String):

Символы аргумента String добавлены, чтобы увеличить длина этой последовательности по длине аргумента. Если str ноль, то четыре символа "ноль" прилагается.

Ваш код похож на:

public class NewClass {
    public static void main(String[] args) {
        String str=null;

        System.out.println(new StringBuilder().append(str)
                                              .append("Added")
                                              .toString());
    }
}

Это делает это понятнее?

2 голосов
/ 11 ноября 2009

Что происходит, когда вы используете оператор +, оба операнда преобразуются в строку (если требуется) с помощью метода String.valueOf. Это возвращает четырехсимвольную строку «null» для нулевой ссылки, а не фактическую нулевую ссылку.

Таким образом null + "Added" равно "null" + "Added" и, следовательно, "nullAdded".

0 голосов
/ 11 ноября 2009

Java будет / имел всегда при конкатенации строки преобразует нулевые объекты в строку нулевой. через String.valueOf.

Java знает, что она объединяется в строку, поэтому даже если нулевое значение находится в начале (не в конце) выражения, оно все равно преобразует его в нулевое.

вы не получите nullpointerException, так как никакая операция не вызывается для нулевого объекта. Немного странно, я знаю. но это то, что есть.

ссылка: concat null и String

0 голосов
/ 11 ноября 2009

Что вы можете сделать, это инициализировать строку пустой строкой:

String str = "";
0 голосов
/ 11 ноября 2009

Строковая переменная str имеет нулевое значение.

Когда вы печатаете его, String # toString () преобразует его в строку 'null' и добавляет строку «Added». Результат

nullAdded
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...