Java面试题一

    科技2025-05-07  17

    Java面试题一

    写出如下代码 的运行结果

    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。

    Processed: 0.009, SQL: 8