java“if”和“if-else”表现

时间:2011-12-11 09:51:58

标签: java performance conditional-statements

我想知道这句话是否有区别。

public String returnSomething() {
  String result = null;
  if(isOK) {
    result = "YES";
  }
  result = "NO";
  return result;
}

和这一个

public String returnSomething() {
  String result = null;
  if(isOK) {
    result = "YES";
  } else {    
    result = "NO";
  }
  return result;
}

哪一个表现最好?哪一个是最好的做法?

10 个答案:

答案 0 :(得分:4)

isOK == true时两者都不相等。第一种方法将返回“NO”,后者返回“YES”。

如果在第一个示例中将赋值放在if之前,它们将返回相同的结果。

答案 1 :(得分:3)

如果你更深入一级并看到微处理器级别,if和else条件就足够快,因为它们只是跳过地址并跳转到由指令集组成的不同地址。所以在上面的场景中两者都同样快。

然而,第一种情况总是会返回“NO”而不管什么是OK,因此我会说它在技术上是错误的。

答案 2 :(得分:2)

抛开两个结构在逻辑上不同的表现 他们不一样。

在第一种情况下,无论result条件是Noif都将设置为true。 在第二种情况下,仅当第一个resut条件不是No时,if才会设置为true

基本上,你试图在这里比较苹果和梨。

答案 3 :(得分:2)

这是条件运算符(有时也称为三元运算符)的一个很好的用例:

public String returnSomething() {
    return isOK ? "YES" : "NO";
}

这应该与其他任何合理的方法相同,但这种方法更简洁,我认为更容易阅读(假设您了解条件运算符)。

答案 4 :(得分:2)

这在性能上没有显着差异。但是意义上有所不同。 你的第一个片段是错误的。它总是返回"NO"。我相信你想写下面的内容:

public String returnSomething() {

  String result = null;

  result = "NO";
 if(isOK) {
    result = "YES";
  }

  result = "NO";

  return result;
}

BTW这样的预成熟优化(甚至考虑这种优化)会导致问题。代码的可读性更为重要。您的代码可以重写为:

public String returnSomething() {
  return isOK ? "YES" : "NO";
}

我认为它更易读,更简单,更易于维护。

答案 5 :(得分:1)

我认为你要做的是如下:

public String returnSomething() {

  String result = "NO";

  if(isOK) {
    result = "YES";
  }

  return result;
}

答案 6 :(得分:1)

第一个会慢一点,因为你在这里做了两个任务,因为@ALS指出了上面的内容。

那是因为代码不正确:)

答案 7 :(得分:1)

对于第一种方法,结果始终设置为“NO”。

答案 8 :(得分:1)

你永远不应该做这种级别的微优化!

您可能会花时间以翻转硬币的准确性来获得答案。即使您编写测试来对其进行基准测试,几乎所有这些基准测试都是在没有正确理解JVM中实际执行的代码的情况下编写的。编译器会为您优化代码,对于微优化来说可能要好得多,这可能会导致代码运行不同于您编写的代码。

即使您确实发现哪个更快,但差异可以忽略不计,因此不可能导致您的软件出现任何问题。所以任何真正的性能问题都在别处。我真诚地怀疑,对于一百万次此类操作,这些差异将超过100毫秒。

答案 9 :(得分:1)

我相信你对第一个例子的看法是这样的:

public String returnSomething() {
    if(isOK) {
      return "YES";
    }
    return "NO";
}

因此无需创建临时变量!与第二个例子没有区别。

编辑:我知道这只是一个示例代码,但在命名成员变量时可能需要遵循一定的约定(例如isOK - > m_isOk)