2014-12-01 82 views
4
if (a > b) { 
    return true; 
} 
return false; 

与上面的代码的Netbeans给"Redundant if statement"警告,建议其更改为:冗余如果声明警告

return a > b; 

我想到的第一个版本是更容易阅读和喜欢我的代码中使用它。我想知道与建议的相比是否存在任何缺点。

+0

我觉得是可读性,我更建议代码在NetBeans。您可能想比较两个版本生成的.class。我认为他们会根据同一套指令进行优化。 – 2014-12-01 16:56:01

+1

我会发现这样的警告很烦人。在上面的简单情况下,第二种形式可能会更好,但是更复杂一些,第一种可能会被认为更具可读性。 – 2014-12-01 17:02:28

+0

我更喜欢后者的版本,但你应该可以设置你的偏好。如果Netbeans没有这个选项,你应该提出功能请求。 – 2014-12-01 17:27:02

回答

7

if (a > b) { 
    return true; 
} 
return false; 

在于推a值在堆栈中,在堆栈上推b值,弹出两者和检查的>结果。如果它是true,请在堆栈上按true的值,然后弹出并返回它。如果它是false,则分支到字节码中更远的位置,将堆栈中的值推到false,然后弹出并返回。

return a > b; 

你推的ab值在堆栈上,然后在弹出的价值观和这些值推>结果到堆栈的情况。然后弹出该值并返回。

所以

return a > b; 

不知不觉在字节代码级别更有效。

(IMO我找到第二个更具可读性,我相信大多数人会了。)

+0

我也更喜欢第二个版本的可读性---你的+1 ...... – 2014-12-01 17:00:55

+1

这里的效率是无关紧要的,或者很可能一旦JIT编译器完成它就不存在了。 “我们应该忘记小效率,大约97%的时间” - Donald Knuth – 2014-12-01 17:29:13

+0

w/@DavidConrad同意:不要担心javac或JIT编译器的工作,更重要的是:不要教新程序员去做。如果你的代码要慢一些,首先进行高层次的概述,然后测量,然后进行优化。 – 2015-06-26 12:38:00

0

从编译器的角度来看,您的代码确实包含了一些额外的计算。需要为布尔值分配内存(即返回)并执行a> b计算。 A> b返回布尔值,所以如果你返回它很容易。 虽然他们都有相同的逻辑。

+0

请参阅David Conrads的评论。 – 2015-06-26 12:38:48