带增量的Java return语句-一般行为是什么?

DrH*_*DrH 5 java return increment order-of-execution

我刚刚了解到,如果return语句包含一个递增操作,则该返回将首先执行,并且该值将在递增之前返回。如果我先在单独的语句中递增,然后返回,则它将按预期工作。

private static int incrementIntV1(int a)
{
   return a++;
}

private static int incrementIntV2(int a)
{
    a++;
    return a;
}

public static void main(String[] args)
{
    int b = 6;

    System.out.println("Increment in return: " + incrementIntV1(b));
    System.out.println("Increment first, then return: " + incrementIntV2(b));
    System.out.println("Increment with addZero: " + incrementAddZero(b));
}   
Run Code Online (Sandbox Code Playgroud)

return发生了什么,使它有时对整个表达式求值而有时不求值?这是关于增量操作如何发生的特殊之处吗?

如果我尝试:

private static int incrementAddZero(int a)
{
    return a++ + addZero();
}

private static int addZero()
{
    System.out.print("addZero executes");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

增量操作仍然没有发生,但是我知道addZero方法由于print语句而运行。为什么它在返回之前不增加,但是在返回之前确实执行addZero方法?

希望他有道理。非常感谢

Era*_*ran 9

您遇到的行为与 return 语句无关。这是后增量运算符的行为。表达式a++递增a但返回 的先前值a

return a++;
Run Code Online (Sandbox Code Playgroud)

相当于:

int x = a++;
return x;
Run Code Online (Sandbox Code Playgroud)

相似,

return a++ + addZero();
Run Code Online (Sandbox Code Playgroud)

相当于:

int x = a++ + addZero();
return x;
Run Code Online (Sandbox Code Playgroud)

或者 :

int x = a++;
return x + addZero();
Run Code Online (Sandbox Code Playgroud)

a++返回a增加之前的值。

return 发生了什么使其有时评估整个表达式而有时不评估?

return始终计算返回的整个表达式(除非 return 语句包含一些短路运算符,例如&&and ||,但这里不是这种情况),但后增量运算符的计算a++返回a.

  • 您可以使用“return ++a”在一条指令中获得您想要的内容。 (2认同)