2013-08-04 2 views
2

Эта программаКонкатенация к нулевой переменной производит неожиданный результат в Java

public class OddBehavior { 
    public static void main(String[] args){ 
     String[] words = new String[3]; 
     words[0] += "ify"; 
     System.out.println(words[0]); 
    } 
} 

имеет следующий вывод:

Image

Я инициализирован массив 3 String с, что я думал, что будет null , Но, добавив строку «римента» до конца words[0], то words[0] получил значение "nullify", то есть он уже содержал Строка "null" (String, а не значение null!)

+0

@ChrisMiddleton Читать это [ответ] (http://stackoverflow.com/questions/4260723/concatenating-null-strings-in-java/4260803#4260803). –

+0

Нет ни одного хорошего ответа. Если боги Java объявили, что «строка значения« null »должна печататься как пустая строка», тогда кто-то прямо сейчас будет размещать SO, спрашивая, не было бы лучше напечатать «нуль» вместо этого. Это просто решение, которое было принято, не лучше или хуже, чем другое решение. –

ответ

3

Код words[0] += "ify" эквивалентно words[0] = words[0] + "ify". Когда строки объединены с оператором +, Java внутренне использует StringBuilder, чтобы собрать их вместе. Когда null добавляется к StringBuilder, вместо этого он использует литерал "null". Вот почему это происходит.