關於 Java 變量初始值,常見的困惑:
int a; 和 int a = 0; 是否一樣?String a = null; 和 String a; 是否一樣?基本數據類型: 類成員變量(實例/靜態變量)有默認初始值(如 int 默認 0),局部變量沒有默認值,必須顯式初始化後才能使用。
引用數據類型: 類成員變量默認初始值為 null;局部變量同樣沒有默認值,必須顯式賦值(哪怕是 null)才能使用。
| 類型 | 默認值(成員變量) | 局部變量 |
|---|---|---|
| byte, short, int, long | 0 | 無默認值,需顯式初始化 |
| float, double | 0.0 | 無默認值,需顯式初始化 |
| char | '\u0000' | 無默認值,需顯式初始化 |
| boolean | false | 無默認值,需顯式初始化 |
因此,int a; 在類中等同於 int a = 0;,但在方法內會編譯報錯「variable might not have been initialized」。
所有對象引用(類、接口、數組)在作為類成員時默認為 null。局部引用變量無默認值,必須顯式賦值:
String s; // 編譯錯誤:局部變量未初始化
String s = null; // 正確:顯式賦值為 null
String s = "hi"; // 正確:指向對象
若嘗試使用未初始化的局部引用(如 s.length()),編譯器會報錯,因為沒有指向有效的內存地址。