-
자바 Switch 문 vs If else 문 성능 비교Java&Spring/Java 2022. 9. 29. 20:52
두 함수 중 어느 것이 더빠를가?
public static void codeswitch() { String str1 = "C"; switch (str1) { case "A": break; case "B": break; case "C": break; } } public static void ifelse() { String str = "C"; if ("A".equals(str)) { } else if ("B".equals(str)) { } else if ("C".equals(str)) { } }
답은 swtich 문이다.
Inttellij View show Byte code 를 보자 Byte code 를 보자
public static codeswitch()V L0 LINENUMBER 9 L0 LDC "C" ASTORE 0 L1 LINENUMBER 10 L1 ALOAD 0 ASTORE 1 ICONST_M1 ISTORE 2 ALOAD 1 INVOKEVIRTUAL java/lang/String.hashCode ()I TABLESWITCH 65: L2 66: L3 67: L4 default: L5 L2 FRAME APPEND [java/lang/String java/lang/String I] ALOAD 1 LDC "A" INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L5 ICONST_0 ISTORE 2 GOTO L5 L3 FRAME SAME ALOAD 1 LDC "B" INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L5 ICONST_1 ISTORE 2 GOTO L5 L4 FRAME SAME ALOAD 1 LDC "C" INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L5 ICONST_2 ISTORE 2 L5 FRAME SAME ILOAD 2 TABLESWITCH 0: L6 1: L7 2: L8 default: L8 L6 LINENUMBER 12 L6 FRAME SAME GOTO L8 L7 LINENUMBER 14 L7 FRAME SAME GOTO L8 L8 LINENUMBER 18 L8 FRAME CHOP 2 RETURN L9 LOCALVARIABLE str1 Ljava/lang/String; L1 L9 0 MAXSTACK = 2 MAXLOCALS = 3 // access flags 0x9 public static ifelse()V L0 LINENUMBER 21 L0 LDC "C" ASTORE 0 L1 LINENUMBER 22 L1 LDC "A" ALOAD 0 INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L2 GOTO L3 L2 LINENUMBER 23 L2 FRAME APPEND [java/lang/String] LDC "B" ALOAD 0 INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L4 GOTO L3 L4 LINENUMBER 25 L4 FRAME SAME LDC "C" ALOAD 0 INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z IFEQ L3 L3 LINENUMBER 27 L3 FRAME SAME RETURN L5 LOCALVARIABLE str Ljava/lang/String; L1 L5 0 MAXSTACK = 2 MAXLOCALS = 1
Switch 문에서는 table (Lookup)table 을 만들어 index 로 접근 하는데
if else 문의 겨우는 하나씩 비교하면서 내려온다.
본인 이 enum 을 사용할때 는 Switch 문을 "잘" 구현하자 -> 예외 처리에 따라 생각 보다 느릴 수 가 있다.
'Java&Spring > Java' 카테고리의 다른 글
자료구조 Stack , add vs push (0) 2023.09.04 Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력 (0) 2023.09.04 GC 기본 개념 , 종류 (0) 2023.09.04 자바를 조심스럽게 열어 보았다 - Switch 문 (1) 2023.05.04 JAVA for , enhance for, Stream (0) 2022.11.01