Байт-код Java, если условие в циклеJAVA

Программисты JAVA общаются здесь
Anonymous
Байт-код Java, если условие в цикле

Сообщение Anonymous »

Я работаю над декомпилятором Java, и сегодня я нашел файл класса, вот исходный код файла класса после декомпиляции

Код: Выделить всё

loop {
if ([ 119            ifeq] var_17_9.hasNext() /* target: 148 */) {
[ 129          astore] Object var_12_10(1) = var_17_9.next();
if ([ 142            ifeq] c0.v(var_18_8, (String)var_12_10, 0) /* target: 112 */) {
[ 145            goto] goto 151;
}
}
else {
[ 149          astore] Object var_12_12(1) = null;
}
if ([ 153       ifnonnull] var_12_12 == null /* target: 161 */) {
[ 157        istore_2] var_2_11(0) = 1;
}
else {
[ 162        istore_2] var_2_11(0) = 0;
}
if ([ 164            ifeq] var_2_11 /* target: 177 */) {
[ 171 invokeinterface] var_13_3.add(var_14_7);
}
}

вывод javap

Код: Выделить всё

       112: aload         17
114: invokeinterface #91,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
119: ifeq          148
122: aload         17
124: invokeinterface #94,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
129: astore        12
131: aload         18
133: aload         12
135: checkcast     #96                 // class java/lang/String
138: iconst_0
139: invokestatic  #99                 // Method yo4/c0.v:(Ljava/lang/String;Ljava/lang/String;Z)Z
142: ifeq          112
145: goto          151
148: aconst_null
149: astore        12
151: aload         12
153: ifnonnull     161
156: iconst_1
157: istore_2
158: goto          163
161: iconst_0
162: istore_2
163: iload_2
164: ifeq          177
167: aload         13
169: aload         14
171: invokeinterface #105,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
176: pop
сначала я хочу знать, как написать такой оператор if, например offset 142 вернуться к 112 , это продолжение
следующая инструкция 145 – это переход
или какая версия jdk может скомпилировать такой оператор if

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-in-loop

Вернуться в «JAVA»