2015-05-18 7 views
1

Значение по умолчанию для Java String равно «null». Однако, когда я создаю экземпляр строки, она кажется пустой пустым. Может кто-нибудь объяснить это, пожалуйста?Значение по умолчанию Java String: null vs ""

class Stuff 
{ 
    String a; 
    String b = new String(); 
} 

class Demo 
{ 
    public static void main(String[] args) 
    { 
     Stuff s = new Stuff(); 
     System.out.println(s.a); 
     System.out.println(s.b); 

     if(s.b.equals("")) 
     { 
      System.out.println("true"); 
     } 
    } 
} 
+1

Я предполагаю, что 'String b = new String()' такое же, как 'String b =" "'. – Ben

+0

Вы можете создать экземпляр String многими другими способами. – Thilo

+0

@Ben: Не совсем. Он создает новый экземпляр (который присваивает '' '' не будет) – Thilo

ответ

0

Ну, строка b уже не null, потому что вы создали String и присвоили ее переменной.

Если вы используете конструктор по умолчанию String, вы получите пустую String:

общественности String()

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

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#String()

2

String() конструктор Javaodc говорит,

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

Что соответствует вашему наблюдаемому поведению.

2

В Java строка по умолчанию или строка устанавливается как нуль не имеет никакого значения. Установив строку с "" или с new String(), она создаст новый экземпляр класса String. Строка, которая инициируется с помощью «» или new String(), представляет собой только строку, готовую к использованию. Думаю, вы можете подумать об этом как о чашке. Если что-то пусто, у вас нет чашки, но если что-то, например эта строка, запускается как new String() или «у вас теперь есть пустая чаша.

+0

Мне нравится аналог чашки^ – Ben

+0

Хотя в соответствии с ответом @ Тило на исходный вопрос и [эта тема] (http://stackoverflow.com/questions/15646188/best-practice-curiosity-regarding-string-instantiation), ' Строка b = "" 'не обязательно создает новый экземпляр объекта' String', он может ссылаться на существующий элемент в основном пуле. – Ben