2013-01-20 39 views
4
class TestMe{ 
    public static void main (String args[]){ 
     String s3; 
     System.out.print(s3); 
    } 
} 

爲什麼編譯器給出錯誤,refernce對象的默認值爲null,爲什麼它不是輸出...... ??java中string的初始化是否必要...?

error: variable s3 might not have been initialized

+0

我改變了類的名稱,否則它可能會出現問題,如果你的類被稱爲'Java'' – doniyor

+0

[Java中的未初始化類成員不會發出任何編譯器錯誤。但是局部變量的確如此爲什麼(HTTP://計算器。com/questions/8521917/uninitialized-class-members-in-java-do-not-issue-any-compiler-errors-local-vari) – Lion

回答

2

局部變量應該初始化使用它們之前,本地變量不要在Java中獲得的默認值,因此您string s3沒有得到默認值零,因爲它是一個局部變量,因此編譯器錯誤。

FOM JLS

如果聲明符不具有初始化表達式,然後每 參考變量必須由 分配的執行前面的變量,或編譯時錯誤發生時由§16的規則 。

0

是的,這是必要的。

String s3; 
s3 = "Something...."; 
System.out.print(s3); // prints "Something..." 

在使用本地變量之前,必須初始化它。

1

null默認值僅適用於非final場一類的

所有其他情況下,第一次使用前,需要初始化

+0

或者數組的單元格也將其值初始化爲默認值,即使數組是本地的。 – Mik378

+0

數組單元格不是字段。一個未初始化的數組就是例如'Object [] foo;'如果你分配數組,例如'new Object [50]''new'的屬性是它根據類型將所有內容設置爲'0'或'null' 。 –

+0

是的,每個單元都使用數組的類型默認值進行初始化。我不僅談論字段或非初始化數組,而是應用默認值的情況。例如,一個布爾數組可能會將其所有單元初始化爲「false」。 – Mik378

0

我知道局部變量是什麼:
局部變量的聲明主要是爲了做一些calculation.So是程序員決定給予價值的變量,它不應該採用默認值。如果程序員錯誤地沒有初始化一個局部變量,那麼它就會使用默認值,那麼輸出就會出錯。因此局部變量會要求程序員在使用變量前進行初始化以避免出錯。

0

使用默認值的唯一方案是相關變量是對象的字段或數組的組件即使是本地的情況。實際上,數組總是使用適當的默認值初始化它們的單元格。

因此,在你的情況下,你的變量不是來自一個字段(因爲是本地的方法),並沒有參與數組的初始化。因此,編譯器邏輯上抱怨..

相關問題