2014-03-27 48 views
0

新手問題:自動變量賦值?

我有兩個類:

class A { 
    public static void main(String...args){ 
     B b = new B() 
     System.out.println(B.firstVar); // 0 
    } 
} 

class B { 
    public int firstVar; 
} 

爲什麼它打印0時,沒有值被分配到firstVar?

+0

該整數的默認值爲0 – Sathesh

+0

請注意,整數類型實例變量在C++和Java中均自動初始化爲0,而整型局部變量僅在Java中自動初始化 – mangusta

+0

@mangusta沒有局部變量被自動初始化在java見鏈接http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – TheMohanAhuja

回答

1

第一件事有有兩種錯誤代碼

缺少一個分號:

B b = new B() 

二是努力使用非靜態成員與類名

System.out.println(B.firstVar); 

應該

System.out.println(b.firstVar); 

回答你的問題:當一個構造函數被調用時初始化成員變量/到相應類型的默認值類的屬性。

 
Type Default Value (for fields) 
byte 0 
short 0 
int  0 
long 0L 
float 0.0f 
double 0.0d 
char '\u0000' 
String (or any object)  null 
boolean  false 

這就是爲什麼即使沒有初始化它打印0

注:局部變量略有不同;編譯器從不將默認值分配給未初始化的局部變量。

0

這就是Java的initilializes變量的方法。 例如int值初始化0null

Object obj; // obj is null 
int i; // i is 0 
double d; //d is 0 
0

對象當您沒有設置任何的變量,它被分配一個零默認情況下(在INT的情況下)