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方法?
希望他有道理。非常感谢
您遇到的行为与 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.
| 归档时间: |
|
| 查看次数: |
5293 次 |
| 最近记录: |