從我所知,初始化變量是當您爲其設置值時。例如:本地變量字符串可能尚未初始化特性
String s; // declaring the String (throws an error if you use in conditionals)
String s = null; // declaring and then initializing the String (no error)
然而,當String
聲明,是不是自動初始化爲null
?因此,編譯器不應該拋出錯誤。
我還注意到String s = new String();
與條件一起使用時不會產生任何錯誤,但String s;
不會產生任何錯誤。我認爲這兩種說法基本上是一樣的,後者甚至比前者更受鼓勵。
我的問題是,爲什麼String s = new String();
工作,但不是String s;
(當使用條件來設置它們的值)?不應該將這兩個字符串自動初始化爲null
,因此不會導致錯誤?
獎勵問題:由於String
對象被自動初始化爲null
,爲什麼以下代碼打印出空的String
?
String s = new String();
System.out.println(s);
編輯:顯然,我不覺得直,當我累了。這整個問題是一團糟,我不知道我在想什麼。向那些不得不嘗試理解的人道歉。
此外,Oracle docs上的默認值:
局部變量是略有不同;編譯器從不將默認值分配給未初始化的局部變量。如果你不能初始化聲明它的局部變量,確保在你嘗試使用它之前給它賦值。訪問未初始化的本地變量將導致編譯時錯誤。
其中回答了上述問題。
你的問題與其他人沒有什麼不同。如果在類中聲明瞭**,則String將初始化爲'null' **。並且'new String()'按照你所期望的那樣創建一個String對象,而不是null。在這裏看到沒什麼不尋常的 – 2014-10-08 21:21:09
String s = new String();相當於String s = new String(「」);所以在第一種情況下s不爲空。 – ToYonos 2014-10-08 21:25:00
投票結束只是這個問題的許多重複之一。 「獎金」問題是一個非問題,並且不需要重複,因爲它在Java書第一章的任何介紹中都有答案。 – 2014-10-08 21:28:41