最近又在回头复习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);
这样一来,对于运行结果就有了一个明确的理解。
推荐一个不错的博文:java 操作符详解,看后有很大的收获!