2015-12-22 46 views
-1

switch語句的作用之一是它們接受常量作爲參數,但是觀察以下代碼我們可以清楚地注意到編譯器在標記行以case常量作爲參數的switch語句does not compile

處報告的編譯錯誤
public void testSwitch(final int y){ 
     final int x= 0; 
     int tester = 9; 
     switch(tester){ 
     case x: 
      break; 
     case y://compilation error here case constant must be constant expression 
      break; 
     } 
    } 

這與所謂的「編譯時間」常量有關嗎?

+1

它被標記爲最終犯規,使其成爲一個常數添加下列行也會使編譯器抱怨Y = 10?; –

+1

我認爲問題在於'y'可以在調用之間改變值,所以在這個意義上它不是'常量表達式'。你需要那些不會改變的東西,即使是在通話之間。 – ray

+2

y不是一個常量表達式,因爲您可以反覆調用任何您想要的值。 – pvg

回答

0

y參數可以有多個值傳遞給方法調用,所以它不是一個常量。它甚至可以是0值這將使它一樣case x