1. 程式人生 > 其它 >Java:成員變數、區域性變數、區域性變數陣列的初始值

Java:成員變數、區域性變數、區域性變數陣列的初始值

看到一個題解,發現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 + " " );
  • 錯誤:

參考