java运算时是多地址的, 运算后的值取最后一个地址的值。意思就是说,在运算一个表达式时,该变量每出现一次就会生成一个新的地址。
单地址运算和多地址运算有什么不同呢?
比如看下边的运算:m = 10
m += m ++;
如果是单地址运算:
首先执行++操作,m++,此时m=11;表达式为m+=10;
然后运算m+=10;此时m=11+10=21;
运算结果为21;
如果是多地址运算:
每出现一个变量都会开辟一个新地址存储。故在这条命令里会生成三个地址,分别为M1,M2,M3,且初始都为10;
运算前M2=M1=10;
++优先级较高,故该表达式先运算++;
此时M1=11;M2=10;M3=M2+10;
最后求得M3=20;运算后的值取最后一个地址的值,所以m=M3=20;
运算结果为20;
接下来实操验证结果:
public class LLL {
public static void main(String[] args) {
int f = 10;
f = f * (f - f) + f;
System.out.println("f="+f);
int m = 10;
m += m ++;
System.out.println("m="+m);
}
}
运算结果:
验证正确,m=20,java里运算是多地址的。