【问题标题】:returning boolean variable or returning condition both are same?返回布尔变量或返回条件都相同吗?
【发布时间】:2018-12-17 03:28:24
【问题描述】:

我一直在评论不要在 return 语句中使用变量,而是直接在 return 语句中使用条件。 下面代码中的第 3 行和第 4 行有什么区别吗?

String str = "Hello Sir";
boolean flag = str.contains("Hello");
return(flag);
// instead ask to use below
return(str.contains("Hello"));

我更喜欢使用变量,因为在复杂的计算中它们有助于调试。

【问题讨论】:

  • 第二个是一行而不是两行。但是如果你喜欢打印调试,你可以在返回之前输出变量,在第一个例子中。
  • 另外,return 不是函数,如果不需要,请不要将返回值括在括号中。

标签: java code-analysis static-analysis static-code-analysis


【解决方案1】:

这里真的没有区别。该变量位于堆栈上,直接返回的值也是如此。

因此,理论上,它们之间可能存在细微的性能差异。

但请放心:可读性在这里更为重要,因此我与您同在:您可以使用这样一个额外的变量来帮助读者。但是,当您遵循干净的代码原则时,另一种选择是拥有一个计算该条件并返回结果的方法。

请注意:“常见”的做法是避免额外的变量,所以很多工具如 PMD 甚至 IDE 建议你直接返回(见here关于这方面的讨论)。

最后,回归性能。如果您的方法被调用得足够频繁,那么 JIT 无论如何都会内联/编译它,并对其进行优化。如果该方法没有被足够频繁地调用,我们会关心多少纳秒的执行时间......

【讨论】:

  • 我还要说 JVM 可能足够聪明,可以简单地优化掉 boolean flag 行。可能字节码会完全一样。
  • @Ben 默认的 javac 没有做太多优化。不断折叠就是关于它的。所以字节码可能不同。 JIT 所做的当然完全不同。
  • 不客气,这有助于为我的回答添加更多信息!
【解决方案2】:

我看不出有什么不同.. 基本上它是直接返回值而不是返回包含值的变量..

编辑:好的,答案看起来像是对问题的重写。我的意思是它传递一个值(真/假)或传递一个变量让系统解开它的值( var -> 真/假)

所以,第一个选项的性能更好.. 但没有什么值得违背您个人偏好的..

【讨论】:

  • 这将是一个平庸的答案,这不是一个合理的答案!请改进它,或者删除它。
猜你喜欢
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 2015-10-29
相关资源
最近更新 更多