2014-02-19 5 views
3

Когда я выполняю следующий код, выход «nullHelloWorld». Как Java обрабатывает нуль?Почему в строке выводится нулевое значение?

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String str=null; 
     str+="Hello World"; 
     System.out.println(str); 
    } 
} 
+0

Запустить код ;-) –

+0

+1: Необычное злоупотребление правилами конкатенации строк :) Я этого не знал. –

ответ

12

Вы пытаетесь объединить значение в null. Это регулируется «Струнный Конверсия», которое происходит, когда один из операндов является String, и покрыта the JLS, Section 5.1.11:

Теперь только эталонные значения должны быть рассмотрены:

  • Если ссылка null, он преобразуется в строку «null» (четыре символа ASCII n, u, l, l).
+0

Для тех, кто здесь ищет способ избавиться от этого «пустого» при запуске, простой способ будет инициализировать вашу переменную пустой строкой «" », а не« null ». – Pshemo

6

При попытке Concat null через + оператора, оно эффективно заменить на String содержащий "null".

Хорошая вещь об этом, что таким образом можно избежать NullPointerException, что вы бы в противном случае получить, если вы явно назвать .toString() метод на null переменной.

0

Java обрабатывает null как ничто, это значение по умолчанию для строки. Он появляется в вашем строковом выходе, потому что вы используете +=, чтобы добавить «Hello World» в str.

String str=null; 
str+="Hello World"; 
System.out.println(str); 

Вы в основном говорить Java: дать моей str переменной типа String и присвоить ему значение null; теперь добавьте и назначьте (+=) String «Hello World» переменной str; теперь распечатать str

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