2014-07-17 25 views
0

第一程序:在範圍,壽命方面是否有區別?

class Demo { 
    public static void main(String args[]) { 
     Object obj ; 
     while(true) { 
     obj = new Object(); 
     } 
    } 
} 

第二方案:

class Demo { 
    public static void main(String args[]) { 
     Object obj = null; 
     while(true) { 
     obj = new Object(); 
     } 
    } 
} 

問題:是否有在在兩個節目,其中obj是在迴路中分配的值obj範圍術語(任何差異在第一程序)並且obj最初被分配了空值(在第二個程序中)。

+0

請問你的第一個程序運行,並沒有錯誤? – bumbumpaw

+0

是的,它運行沒有錯誤... – Anonymous

+0

好吧,實際上,對象類型的默認值是'null'。所以使它無效或不初始化它是相同的。 – bumbumpaw

回答

1

在這兩種情況下,obj的範圍都是直到主方法結束。由於while(true)條件,兩個程序都將無限運行。

在第一種情況下,然而,使用obj外循環,企圖將導致編譯錯誤,因爲它不是初始化(假設而循環終止在某一點)

public static void main(String []args){ 
     Object obj; 
     while(args != null) { 
      obj = new Object(); 
     } 
     System.out.println(obj); //compilation error 
} 
+0

錯誤..將不會有編譯錯誤。 – Anonymous

+1

你爲什麼不嘗試並檢查自己:http://ideone.com/xa2Hng –

+0

@nihal在外部循環中使用'obj'會導致編譯錯誤,因爲你的文章中的'unreachable code'。在Nikhils的例子中,這是因爲'未初始化的局部變量'。編譯器檢查本地變量是否在到達使用它的語句之前通過每條可能的路徑進行初始化。 – Shail016

相關問題