Cᴴᴀ*_*ᴴᴀZ 3 java binary-operators unary-operator assignment-operator
令人怀疑的结果如下代码:
public static void main (String[] args)
{
int i = 2;
i = i+=2 + i++;
System.out.println(i); }
Run Code Online (Sandbox Code Playgroud)
期待8作为输出,因为'i + = 2'应该更新 i,但它不表现如此.
产量:6
我推断短手赋值运算符按预期返回4但不在变量i中更新相同.任何解释将不胜感激.
i++是一个后缀增量 - 它增加i,然后基本上返回i的旧值.等效前缀运算符++i将返回"已更新"值,但这不是此处使用的值.
i+=2然而,它的工作方式不同,它基本上等同于i+2,因为它确实返回更新的值.
但是,我认为出现混乱的地方就是你这样看:
i = (i += 2) + i++;
Run Code Online (Sandbox Code Playgroud)
......这确实给出了你的预期结果.i+=2得到4,并更新i为4,然后i++返回4(而不是5,因为它是一个后增量.)但是,当你将运算符优先级放入等式时,Java实际上默认"括号"它:
i = i += (2 + i++);
Run Code Online (Sandbox Code Playgroud)
为了清除任何混淆,Java会以这种方式对其进行求值,因为在此示例中,+=运算符的优先级最低,因此+首先计算加法表达式().
这个括号内的陈述基本上等同于:
i = (i = i + (2 + i++));
Run Code Online (Sandbox Code Playgroud)
这反过来简化为:
i = i + (2 + i++);
Run Code Online (Sandbox Code Playgroud)
所以鉴于上面的陈述,并从左到右进行评估,我们首先取i(2)的值,然后加上它的值2+i++; 后者给出4(因为后缀增量).所以我们的最终结果是2 + 4,即6.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |