性能差异:在if-else块中初始化和覆盖,还是额外的“else”?

时间:2018-01-11 23:59:49

标签: java performance

我很好奇以下哪项更有效:使用默认值初始化变量,只在if-else块中需要时覆盖它,或者根本不初始化变量并设置if-else块中的值?

以下是前者和后者的一个例子:

前任:

    String weightStatus = "Underweight";

    if (bMI > 29.9)
    {
    weightStatus = "Obese";
    }

    else if (bMI >= 25.0)
    {
    weightStatus = "Overweight";
    }

    else if (bMI >= 18.5)
    {
    weightStatus = "Healthy Weight";
    }

后期:

    String weightStatus;

    if (bMI > 29.9)
    {
    weightStatus = "Obese";
    }

    else if (bMI >= 25.0)
    {
    weightStatus = "Overweight";
    }

    else if (bMI >= 18.5)
    {
    weightStatus = "Healthy Weight";
    }
    else
    {
    weightStatus = "Underweight";
    }

我猜想差异并不明显,但我不禁想知道根据变量赋值的工作方式,哪一种在技术上更快。

1 个答案:

答案 0 :(得分:2)

如您所知,前一种情况,字节码将始终设置变量,然后根据if/then,它可能会重置它。

但它还取决于哪些值会在运行时传递,如果它们大多不在then分支中,那么我猜它不会产生太大的影响,但如果它们经常进入{{ 1}}分支,然后主要是双设置执行。

您可以使用以下内容进行测试:

then