写出如下代码 的运行结果
public static void main(String[] args) { int i=1; i=i++; int j=i++; int k=i+ ++i*i++; System.out.println("i="+i); System.out.println("j="+j); System.out.println("k="+k); }最终结果:
i=4 j=1 k=11我们首先分析一下,在分析之前我们先搞清楚i++和++i的区别,那么对于这道题也就不难了,
i++,是先赋值后运算,比如
@Test public void test2(){ int i=1; int j=i++; System.out.println("i="+i); System.out.println("j="+j); }那么j最终 的结果为1,而i的结果为2,
但是如果是++i就不一样了,i最终都为2,但j也等于2
@Test public void test3(){ int i=1; int j=++i; System.out.println("i="+i); System.out.println("j="+j); }那么这道题该如何分析呢?
首先分析i=i++;
i=i++;千万不要认为i赋值后变成2了==,因为这时会先将i=1的值压入操作数栈,然后i才变为2,但是不会影响操作数栈中的i,所以此时操作数栈中的i仍然为1,最终赋值操作数栈中的1赋值给i,i就依然为1。==
第三行就比较简单了,所以j最终的结果为1;但是这儿i就变成2了,
我们再来分析int k=i+ ++i*i++;=右边 的会依次压入操作数栈,
首先将i=2压入操作数栈,然后++i将i变成3后压入栈,然后再将i=3压入栈,因为是i++,就变成4了,但是不会影响操作数栈中的i
然后运算2+3*3=11。