为什么一个代码优先于另一个?还是重要的

时间:2013-10-15 16:48:04

标签: java

我只是想知道其中一个代码是否比另一个更受欢迎。

例如:

boolean even;

if (number % 2 == 0)
   even = true;
else
   even = false;

替代代码:

boolean even = (number % 2 == 0);

我认为其中一个是优先于另一个因为一个更短,但我觉得第一个代码更容易阅读(作为初学者)。我只想知道真正的答案,为什么一个人优先于另一个人,或者即使一个人优先于另一个人呢?

1 个答案:

答案 0 :(得分:2)

我会选择第二个,因为你避开了一个分支。在第一种情况下,您有一个if-else构造。这意味着您的代码中有一个分支。第二个示例在代码中没有分支,这提高了可读性。

正如@Dev所指出的,当你将Java源代码编译为字节码时,不幸的是它会生成一个分支。

从技术上讲,编译器可以选择在汇编中执行类似的操作:

TEST eax   ; test for zero of "number % 2"
PUSHF      ; push flag-registers to the stack
POP ebx    ; pop them into a register
SHR ebx,?? ; shift to the FZ flag
AND ebx,1  ; cancel out the other flags

然而,这只是一种可能性,而最有可能并非如此。