Java:成員變數、區域性變數、區域性變數陣列的初始值
阿新 • • 發佈:2022-04-22
看到一個題解,發現int[] a = new int[10];沒有賦初值就直接用了,因為印象中區域性變數沒有預設值的。。。。
成員變數
- 成員變數如果未初始化,會有預設的初始值的:
boolean:false
byte:0
short:0
char:
int:0
long:0
float:0.0
double:0.0
String:null
String[]:null
- 有一點奇怪,char型別變數後面什麼也沒有輸出。不過,這並不是char型別變數沒有預設值,而是預設值為“空字元”,也就是‘\u0000’,數值為0,我們可以證明一下。
package deep; public class CharDefaultValue { static char c; public static void main(String[] args) { System.out.println((int) c); System.out.println(c == '\u0000'); } } //---------------------測試結果 0 true
區域性變數
- 相對於成員變數,區域性變數沒有預設值(不管是什麼型別),如果試圖使用一個區域性變數的值,而這個區域性變數尚未初始化,就會產生編譯錯誤,例如:
public static void main(String[] args) {
int value;
System.out.println(value);
}
錯誤提示:
The local variable value may not have been initialized
區域性變數\(\color{red}{陣列}\)
- 對於陣列而言,如果陣列使用new在堆上分配了空間,則陣列的元素就會獲得預設值,即使陣列變數為區域性變數也是如此。
public static void main(String[] args) {
int[] value = new int[10];
System.out.println(value[0]);
}
//結果:0 0 0 0 0 0 0 0 0 0
可以把陣列的元素看作是
陣列的成員變數(實際上不是)
,當陣列分配空間
時,陣列的元素(行為類似於成員變數)就可以獲得預設的初始值
。不過,對於區域性變數陣列本身(即value),如果沒有初始化,同樣沒有預設值。
(如下)String[] a = new String[10];//有 int[] b;//不new的話還是沒有!!!!會直接報錯 for( String i : a ) System.out.print( i + " " ); for( int i : b ) System.out.println(i + " " );
- 錯誤: