1 つの簡単なテストで、その答えを得ることができます。あなたが持っていると想像してください:
public void x(int i){
if(i == 0){
System.out.println("zero");
return;
}
System.out.println("not zero");
}
public void y(int i){
if(i == 0){
System.out.println("zero");
return;
}
else {
System.out.println("not zero");
}
}
コンパイルされたコードを見てみると ( を使用javap -v <class>
):
xのコード:
public void x(int);
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: iload_1
1: ifne 13
4: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #22 // String zero
9: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: return
13: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
16: ldc #30 // String not zero
18: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
21: return
LineNumberTable:
line 6: 0
line 7: 4
line 8: 12
line 10: 13
line 11: 21
LocalVariableTable:
Start Length Slot Name Signature
0 22 0 this Lpt/kash/Test;
0 22 1 i I
StackMapTable: number_of_entries = 1
frame_type = 13 /* same */
yのコード:
public void y(int);
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: iload_1
1: ifne 13
4: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #22 // String zero
9: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: return
13: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
16: ldc #30 // String not zero
18: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
21: return
LineNumberTable:
line 14: 0
line 15: 4
line 16: 12
line 19: 13
line 21: 21
LocalVariableTable:
Start Length Slot Name Signature
0 22 0 this Lpt/kash/Test;
0 22 1 i I
StackMapTable: number_of_entries = 1
frame_type = 13 /* same */
違いは... ありません。コンパイラは、コードを最適化するのに十分スマートです。
つまり、結論は (前述のとおり): 読みやすさとシンプルさを最適化することです。