ないパフォーマンスの違いで見つけることができます。 bytecodeには、同じデータが同じ順序で同じ命令で処理されています。様々な質問の
L0
LINENUMBER 11 L0
ICONST_1
ISTORE 0
L1
LINENUMBER 12 L1
ILOAD 0
IFEQ L2
L3
LINENUMBER 13 L3
GETSTATIC p/A.something : Ljava/lang/Object;
ARETURN
L2
LINENUMBER 15 L2
FRAME APPEND [I]
INVOKESTATIC p/A.dosomething()V
L4
LINENUMBER 17 L4
ACONST_NULL
ARETURN
L5
LOCALVARIABLE condition Z L1 L5 0
MAXSTACK = 1
MAXLOCALS = 1
対
L0
LINENUMBER 7 L0
ICONST_1
ISTORE 0
L1
LINENUMBER 8 L1
ILOAD 0
IFEQ L2
L3
LINENUMBER 9 L3
GETSTATIC p/B.something : Ljava/lang/Object;
ARETURN
L2
LINENUMBER 11 L2
FRAME APPEND [I]
INVOKESTATIC p/B.dosomething()V
L4
LINENUMBER 12 L4
ACONST_NULL
ARETURN
L5
LOCALVARIABLE condition Z L1 L5 0
MAXSTACK = 1
MAXLOCALS = 1
public class A {
static Object something = new Object();
public static void main(String[] args) {
test();
}
private static Object test() {
boolean condition = true;
if (condition) {
return something;
} else {
dosomething();
}
return null;
}
private static void dosomething() {}
}
対
public class B {
static Object something = new Object();
public static void main(String[] args) {
test();
}
private static Object test() {
boolean condition = true;
if (condition) {
return something;
}
dosomething();
return null;
}
private static void dosomething() {}
}
複製: http://stackoverflow.com/q/7921359/143897 http://stackoverflow.com/q/1370865/143897 –
@JayD質問が関連しているが、彼らはIFAICSに複製されません。しかし、私は非建設的な質問に投票します... –
この質問は非常にコンパイラの実装の詳細に依存するため、答えが不可能です。さらに、この違いはほとんどないので、これを心配することに時間を費やす価値はない。 – Jesper