Skip to content

filtering JAVAC.STRINGSWITCH

Evgeny Mandrikov edited this page Jan 9, 2017 · 5 revisions

This page discusses a not yet available feature!

Description

Starting from Java 7 possible to use String object in the expression of switch statement. In such case compiler generates additional switch that uses hashCode and additional conditions that use equals.

Filtering

Source Example

switch (x) {
  case "AaAa":
    break;
  case "BBBB":
    break;
}

Bytecode Pattern

 ...
 INVOKEVIRTUAL java/lang/String.hashCode ()I
 LOOKUPSWITCH
   2031744: L1
   default: L2
L1
 ALOAD 2
 LDC "BBBB"
 INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z
 IFEQ L3
 ICONST_1
 ISTORE 3
 GOTO L2
L3
 ALOAD 2
 LDC "AaAa"
 INVOKEVIRTUAL java/lang/String.equals (Ljava/lang/Object;)Z
 IFEQ L2
 ICONST_0
 ISTORE 3
L2
 ILOAD 3
 LOOKUPSWITCH
   0: L4
   1: L5
   default: L5
L4
 GOTO L5
L5
 ...