2016-05-31 34 views
-1

下面是其中常變量存在
爲什麼case標籤必須是常量的代碼如果我們提供變量的情況下表達標籤,編譯器會引發編譯錯誤爲什麼case標籤必須是常量表達式,如果我們提供變量的情況下,標籤編譯器將引發編譯錯誤

Class Test 
    { 
    public static void main(String[] args) 
     { 
      int a =10 ,b=20 ,c=30 ; //Here i give constant value 
      switch(a){ 

      case a : System.out.println("10"); 
        break; 
      case b : System.out.println("20"); 
        break; 
      case c : System.out.println("30"); 
        break; 
      default : System.out.println("Default Statement "); 
        } 
     } 


    } 

回答

0

從Oracle認證(OCA)培訓文件:

用於開關和殼體法律表達式

switch語句的一般形式是

switch (expression) { 
    case constant1: code block 
    case constant2: code block 
    default: code block 
} 

的情況常數必須計算爲同一類型,所述開關表達式可以使用,其中一個附加約束和大約束:case常量必須是編譯時常量!由於必須在編譯時解決case參數,因此只能使用一個常量或最終變量,該變量立即用文字值初始化。僅僅是最終的是不夠的;它必須是一個編譯時間常量。什麼是工作,什麼樣的

例子並不:

final int a = 1; 
final int b; 
b = 2; 
int x = 0; 
switch (x) { 
    case a: // ok 
    case b: // compiler error 
} 

在你的情況下,使用:

final int a=10, b=20, c=30; 
+0

類檢驗 { 公共靜態無效的主要(字串[] args) \t { \t \t最終詮釋A = 10,B = 20,C = 30; \t \t開關(一){ \t \t \t \t情況下的內容:System.out.println( 「10」); \t \t \t \t break; \t \t case b:System.out.println(「20」); \t \t \t \t break; \t \t case c:System.out.println(「30」); \t \t \t \t break; \t \t默認:System.out。println(「默認聲明」); \t \t \t \t} \t} } – fool

+0

我把這個,但得到錯誤 – fool

+0

我複製粘貼您的評論的代碼在[compilejava.net(https://www.compilejava.net/)在線Java編譯器。編譯結果是'成功編譯/tmp/java_PTfJ0q/Test.java < - 主要方法>,執行結果爲'10'。你的問題沒有說你正在使用哪個Java版本。我假設Java 7或8.在這些版本中,它似乎工作。 – Wis

0

在java中恆手段,其價值不應該再次發生變化。

因此,如果你把最終關鍵字放在你的變量之前,那麼這些對於java來說將變得不變,編譯器也不會給出錯誤。

final int a =10 ,b=20 ,c=30 ; //Here i give constant value 
相關問題