私はそれを非常に疑っています。原則として、Javaコンパイラはバイトコードの最適化をほとんど行わず、最適化をJIT段階に任せています。
私はこれで少し実験してきた、と私のコンパイラは、次のと面白い何もしない:
public class Clazz {
public static void main(String args[]) {
final String s1 = "something";
final String s2 = "something_else";
if (s1.equals(s2)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
これはおそらく、最適化するための最も簡単な場合です。しかし、バイトコードは以下のとおりです。
public static void main(java.lang.String[]);
Code:
0: ldc #16 // String something
2: astore_1
3: ldc #18 // String something_else
5: astore_2
6: ldc #16 // String something
8: ldc #18 // String something_else
10: invokevirtual #20 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
13: ifeq 27
16: getstatic #26 // Field java/lang/System.out:Ljava/io/PrintStream;
19: ldc #32 // String yes
21: invokevirtual #34 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
24: goto 35
27: getstatic #26 // Field java/lang/System.out:Ljava/io/PrintStream;
30: ldc #40 // String no
32: invokevirtual #34 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
35: return
私はそれゆえ強く==
は、元のソースコードの一部であったと思います。
出典
2013-04-11 20:54:31
NPE
あなたはそれを試しましたか? – durron597
1つの方法は、まるでそのようなコードをコンパイルして、デコンパイラから戻って来るものを見ることです:) – dasblinkenlight
コンパイルされたコードはどのようにデコンパイルされましたか? –