如何解决表达式期间的Java基本变量重新分配
我在测试中有一个问题令我感到困惑(下面的代码)。简而言之,我认为已重新分配了变量,然后将其作为值添加回表达式中(使输出为“ 8,10”),但似乎原始值未更改。我想念什么?
p.s。抱歉,如果存在类似的问题,我找不到一个问题(可能是太明显的:P)。
class InitTest{
public static void main(String[] args){
int a = 10;
int b = 20;
a += (a = 4);
b = b + (b = 5);
System.out.println(a + "," + b);
}
}
解决方法
a += (a = 4);
以上在逻辑上等同于以下内容:
a = a + (a = 4);
如果我们用现有值替换a
,则可以简化为:
a = 10 + 4 = 14
我们可以对b
做同样的事情:
b = b + (b = 5) = 20 + 5 = 25
由于运算符优先级,我们看到了此结果。根据Java operator precedence table的定义,加法运算符+
的优先级高于赋值运算符=
。
您可以看到加法赋值运算符+=
与赋值运算符具有相同的优先级,在这种情况下,表达式是从左到右求值的。
相反,表达式为:
a = (a = 4) + a;
b = (b = 5) + b;
这将导致您期望的输出(a = 8
,b = 10
),因为左操作数是在右操作数之前计算的(计算表达式时)。我将尝试查找Java语言规范中指定的位置。
在Java中,当给变量赋值时,首先计算的是=号的左侧,然后是右侧。因此,当您编写与a += (a = 4);
相同的a = a + (a=4)
等效的a = a + 4
时,b相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。