2017-12-02 11 views
0

文字列のスイッチケースに関連するクエリが1つあります。文字列のスイッチケースの場合、jvmは内部的にどのように動作しますか?文字列のスイッチケース(java 1.7)は内部的にどのように動作しますか?

+0

https://docs.oracle.com/javase/specs/jls/se9/html/jls-14 .html#jls-14.11 – prsvr

+0

この記事を読む:https://stackoverflow.com/questions/10836055/why-is-the-switch-statement-faster-than-if-else-for-string-in-java-7 – DoesData

答えて

0

switchステートメントは、式内のStringオブジェクトを、String.equalsメソッドを使用しているかのように各ケースラベルに関連付けられた式と比較します。その結果、switch文のStringオブジェクトの比較では大文字と小文字が区別されます。

Java Switchのケースでは、String.equals()メソッドを使用して、渡された値と大文字と小文字の値を比較します。

スイッチの文字列に関するJava 7のドキュメントによると、Javaコンパイラは、チェーンオブジェクトのif-then-else文よりもStringオブジェクトを使用するswitch文から、より効率的なバイトコードを生成します。

この例を参照してください:

String fruit ="Mango";  

    switch (fruit) { 
    case "Apple": System.out.println("It's Apple : "+"Apple".hashCode());   
        break; 
    case "mango": System.out.println("It's mango : "+"mango".hashCode()); 
        break; 
    case "Mango": System.out.println("It's Mango : "+"Mango".hashCode()); 
        break; 
    } 

JVMは、次のようにこれを換算:

String fruit = "Mango"; 

    String str1; 
    switch ((str1 = fruit).hashCode()) { 
    case 63476538: 
     if (str1.equals("Apple")) { 
      System.out.println("It's Mango : " + "Mango".hashCode()); 
      } 
     break; 
    case 74109858: 
     if (str1.equals("Mango")) { 
      System.out.println("It's Mango : " + "Mango".hashCode()); 
     } 
     break; 
    case 103662530: 
     if (!str1.equals("mango")) { 
      System.out.println("It's mango : " + "mango".hashCode()); 
      return; 
     } 
     break; 
    } 
+0

私が知りたいのは、JVMが使っているハッシングの概念はありますか? –

+0

@TarunTyagiはい、ハッシングを使用しています。編集したアンカーを確認してください –

+0

デフォルトのケースでも例を表示してください。 –

関連する問題