- public class JustTest {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws Exception
- {
- System.out.println(fun());
- }
- public static int fun()
- {
- int i = 0;
- try
- {
- /*
- * a=b+c是先将b+c计算出来,再赋值给a
- * i+=x等价于i=i+x,在这里等号左边的i是一个变量,等号右边的i其实是一个确定的值(也就是运算之前i的值)
- * 在这里,i += ++i + 1,等价于i=i+(++i +1),也就是i=0+(++0 +1),结果为2
- *
- */
- System.out.println(i += ++i + 1);
- }
- finally
- {
- /*
- * 分析同上,转换一下,等价形式为i=i-(--i-1),也就是i=2-(--2-1)
- * --2=1,1-1=0,2-0=2,所以在这里i的值扔为2
- */
- i -= --i - 1;
- }
- /*
- * 分析同上,但需要注意的是这里出现的是i++
- * 与++i不同的是,++i在参与运算的时候已经在原来的基础上加1,i++参与运算时依然是原来i的值,之后再加1
- * 等价形式为,i=i+(i++ + 1),这里分解一下,分解为int x=i++ + 1;i=i + x;亦即int x=2++ +1;i=2+x;
- * 第一句运算结果为x=3,这时会有将i赋值为3隐含过程(因为i++),然后再执行第二句i=2+x,又将5赋值给了i
- * 所以打印结果为5
- */
- System.out.println(i += i++ + 1);
- /*
- * 这里分析同最上面
- */
- return i += ++i + 1;
- }
- }
复制代码
|