Java 为什么一种代码比另一种代码更受欢迎?或者这有关系吗

Java 为什么一种代码比另一种代码更受欢迎?或者这有关系吗,java,Java,我只是想知道这些代码中是否有一个比另一个更受欢迎 例如: boolean even; if (number % 2 == 0) even = true; else even = false; 备用代码: boolean even = (number % 2 == 0); 我认为一个比另一个好,因为一个更短,但我觉得第一个代码更容易阅读(作为初学者)。我只想知道为什么一个比另一个更受欢迎,或者哪怕是一个比另一个更受欢迎的真正答案?我会选择第二个,因为你避免了分支。在第一种情况下,

我只是想知道这些代码中是否有一个比另一个更受欢迎

例如:

boolean even;

if (number % 2 == 0)
   even = true;
else
   even = false;
备用代码:

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

我认为一个比另一个好,因为一个更短,但我觉得第一个代码更容易阅读(作为初学者)。我只想知道为什么一个比另一个更受欢迎,或者哪怕是一个比另一个更受欢迎的真正答案?

我会选择第二个,因为你避免了分支。在第一种情况下,您有一个
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

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

对我来说,后者更简短,更容易阅读。不过,这几乎是基于个人观点。第二个比第一个更短,也同样清晰。第一种方法没有任何优势。虽然初学者会发现第一种方法更具可读性,但你会发现根据经验,第二种方法也同样可读,而使用一行就成了我的首选方法…@LuiggiMendoza我很高兴你发现你的观点不令人困惑。我也是。这就是它的工作方式。我也同意Bartdude的观点,并鼓励初学者以更有经验的人更喜欢的方式学习写作。每当我看到%2时,我都会畏缩不前,以发现它是否均匀。“布尔偶数=(数字&1)==0”更便宜,可以完成任务:)+1。我同意你的看法,马丁。考虑到性能,最好避免分支。我只是想知道这两段代码是如何使用像汇编程序这样的低级语言编写的。。。无论如何,在编译过程中可能会发生一些优化。这个答案很有意义,也很简单!我现在明白了,避免分支会使整个程序更简短,更容易理解!我给了你最好的答案和+1:D谢谢!!!关于性能,请注意:我意识到这是Java,我们正在处理JVM。但对于编译成本机代码的其他语言:许多机器没有“如果某个比较关系为真,则生成1,否则生成0”的指令,因此像
偶数=(数字%2)==0
这样的表达式无论如何都会产生分支。@ajb实际上此语句会在JVM字节码中生成分支,答案根本不正确。发出的字节码(参数省略)是
irem;ifne。。。;后藤
这无疑是一个分支。同样值得一提的是,这些类型的微优化(在本例中无论如何都不能保证)通常不值得牺牲可读性。第二种选择更有力的理由是可读性,而不是JIT使其无分支的不确定可能性。