最近又在回头复习java基础,在运算符优先级中发现了自己理解的不足。
主要还是在自增和自减中有迷惑,今天的复习才发现,java中数值类型计算是多地址的,同一个变量的值可能在同一时刻并不相等
我们直接上代码看吧
package practice7;
public class Test {
public static void main(String[] args) {
int n = 11 , f = 12;
f = f * (f - f) + f;
f += ++f; // 等价于f = f + ++f;
if ( n++ > 11) {
System.out.println(n);
}else {
System.out.println("是这个n:" + n);
}
System.out.println(n + "======");
System.out.println(f + "*****");
}
}
这只是一个简单的优先级运算,先自行猜测运算结果,我猜测 f 的输出是26,但发现和实际运行结果有所偏差。
运行结果:
这里就需要我们在上面提到的一句话来解释了java中数值类型计算是多地址的,同一个变量 f 的值在同一时刻并不相等,先++的 f 已经是13,而 f 本身还是12
f += ++f; // 等价于f = f(12) + ++f(13);
这样一来,对于运行结果就有了一个明确的理解。