2017-12-02 1 views
0

문자열을 사용하여 스위치 케이스에 관련된 하나의 쿼리가 있습니다. 스위치 케이스의 경우 문자열 내부에서 jvm이 어떻게 작동합니까 (기능은 Java 1.7에 포함)?문자열이있는 스위치 케이스 (내부 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 Case는 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

기본 케이스와 함께 예제를 보여 주어야합니다. –

관련 문제