比较基础的题,但估计会有不少人做错。以下代码执行结果是什么import java.util.*;
public class Test {
public static void main(String[] args) {
int i = 0;
i = i++ + ++i;
int j = 0;
j = ++j + j++ + j++ + j++;
int k = 0;
k = k++ + k++ + k++ + ++k;
int h = 0;
h = ++h + ++h;
int p1 = 0, p2 = 0; int q1 = 0, q2 = 0;
q1 = ++p1;
q2 = p2++;

System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("k = " + k);
System.out.println("h = " + h);
System.out.println("p1 = " + p1);
System.out.println("p2 = " + p2);
System.out.println("q1 = " + q1);
System.out.println("q2 = " + q2);
}
}

解决方案 »

  1.   

    i = 2
    j = 7
    k = 7
    h = 3
    p1 = 1
    p2 = 1
    q1 = 1
    q2 = 0
      

  2.   

    ...自己如果不确定,可把代码放入eclipse中运行一下就出来了..
      

  3.   

    ++ 和 -- 同优先级高于+ ,=, 且结合为从右向左!i = i++ + ++i; 
    可以变成   c = a + b   其中a = i++  , b = ++i;
      ++ 在后,先赋值,后运算,  ++ 在前先运算后赋值!
    运行后,a的值为0 , i的值为1, 所以b的值为2
    所以 i = i++ + ++i 的结果为 2!
    其他的同理分析!   
    一定要注意   a = i++ 啊的值为i的初始值,然后i自增! i的值发生变化!
      

  4.   

    说老实话,我还是因为马虎算错了k的值。
    ++操作在JAVA上来说比C要好理解多了,C上面就很晕的,不同的平台和解释器结果就不一样。
      

  5.   

    int i = 0;
            i = i++ + ++i; //2
            int j = 0;
            j = ++j + j++ + j++ + j++; //7
            int k = 0;
            k = k++ + k++ + k++ + ++k; //7
            int h = 0;
            h = ++h + ++h; //3
            int p1 = 0, p2 = 0; int q1 = 0, q2 = 0;
            q1 = ++p1; //1
            q2 = p2++; //0
    记住两点就好了  ++的优先级高于+运算  其次 就是k++和++k的区别  没啥难的 只要自己不乱 肯定没问题
      

  6.   

    i=i++ + ++I;
    等于 i = (i++)+(++i);
    第一个括号里面的值 仍然为零  但是过了这个括号之后 也就是i已经被用过了一次 增加一。第二个括号当然为2了
    只要弄懂这个下面的就都不难了
      

  7.   

    http://blog.csdn.net/ZangXT/archive/2008/11/05/3229281.aspx
      

  8.   

    很难吗,你还不如写个
    i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i++++i....
    出来了,真够无聊的
      

  9.   

    我是一个初学者,当作练习吧,还是有点帮助的public class Demo { public static void main(String[] args) {
    int i = 0;
    i = i++ + ++i;
    int j = 0;
    j = ++j + j++ + j++ + j++;
    int k = 0;
    k = k++ + k++ + k++ + ++k;
    int h = 0;
    h = ++h + ++h;
    int p1 = 0, p2 = 0;
    int q1 = 0, q2 = 0;
    q1 = ++p1;
    q2 = p2++; System.out.println("i = " + i);
    System.out.println("j = " + j);
    System.out.println("k = " + k);
    System.out.println("h = " + h);
    System.out.println("p1 = " + p1);
    System.out.println("p2 = " + p2);
    System.out.println("q1 = " + q1);
    System.out.println("q2 = " + q2);
    }
    }i = 2
    j = 7
    k = 7
    h = 3
    p1 = 1
    p2 = 1
    q1 = 1
    q2 = 0
      

  10.   

    刚了一点,反编译之后的看看,学习学习o(∩_∩)o public static void main(java.lang.String[] args);
          0  iconst_0
          1  istore_1 [i]
          2  iload_1 [i]
          3  iinc 1 1 [i]
          6  iinc 1 1 [i]
          9  iload_1 [i]
         10  iadd
         11  istore_1 [i]
         12  iconst_0
         13  istore_2 [j]
         14  iinc 2 1 [j]
         17  iload_2 [j]
         18  iload_2 [j]
         19  iinc 2 1 [j]
         22  iadd
         23  iload_2 [j]
         24  iinc 2 1 [j]
         27  iadd
         28  iload_2 [j]
         29  iinc 2 1 [j]
         32  iadd
         33  istore_2 [j]
         34  iconst_0
         35  istore_3 [k]
         36  iload_3 [k]
         37  iinc 3 1 [k]
         40  iload_3 [k]
         41  iinc 3 1 [k]
         44  iadd
         45  iload_3 [k]
         46  iinc 3 1 [k]
         49  iadd
         50  iinc 3 1 [k]
         53  iload_3 [k]
         54  iadd
         55  istore_3 [k]
         56  iconst_0
         57  istore 4 [h]
         59  iinc 4 1 [h]
         62  iload 4 [h]
         64  iinc 4 1 [h]
         67  iload 4 [h]
         69  iadd
         70  istore 4 [h]
         72  iconst_0
         73  istore 5 [p1]
         75  iconst_0
         76  istore 6 [p2]
         78  iconst_0
         79  istore 7 [q1]
         81  iconst_0
         82  istore 8 [q2]
         84  iinc 5 1 [p1]
         87  iload 5 [p1]
         89  istore 7 [q1]
         91  iload 6 [p2]
         93  iinc 6 1 [p2]
         96  istore 8 [q2]
         98  getstatic java.lang.System.out : java.io.PrintStream [16]
        101  new java.lang.StringBuilder [22]
        104  dup
        105  ldc <String "i = "> [24]
        107  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        110  iload_1 [i]
        111  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        114  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        117  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        120  getstatic java.lang.System.out : java.io.PrintStream [16]
        123  new java.lang.StringBuilder [22]
        126  dup
        127  ldc <String "j = "> [42]
        129  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        132  iload_2 [j]
        133  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        136  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        139  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        142  getstatic java.lang.System.out : java.io.PrintStream [16]
        145  new java.lang.StringBuilder [22]
        148  dup
        149  ldc <String "k = "> [44]
        151  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        154  iload_3 [k]
        155  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        158  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        161  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        164  getstatic java.lang.System.out : java.io.PrintStream [16]
        167  new java.lang.StringBuilder [22]
        170  dup
        171  ldc <String "h = "> [46]
        173  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        176  iload 4 [h]
        178  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        181  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        184  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        187  getstatic java.lang.System.out : java.io.PrintStream [16]
        190  new java.lang.StringBuilder [22]
        193  dup
        194  ldc <String "p1 = "> [48]
        196  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        199  iload 5 [p1]
        201  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        204  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        207  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        210  getstatic java.lang.System.out : java.io.PrintStream [16]
        213  new java.lang.StringBuilder [22]
        216  dup
        217  ldc <String "p2 = "> [50]
        219  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        222  iload 6 [p2]
        224  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        227  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        230  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        233  getstatic java.lang.System.out : java.io.PrintStream [16]
        236  new java.lang.StringBuilder [22]
        239  dup
        240  ldc <String "q1 = "> [52]
        242  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        245  iload 7 [q1]
        247  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        250  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        253  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        256  getstatic java.lang.System.out : java.io.PrintStream [16]
        259  new java.lang.StringBuilder [22]
        262  dup
        263  ldc <String "q2 = "> [54]
        265  invokespecial java.lang.StringBuilder(java.lang.String) [26]
        268  iload 8 [q2]
        270  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]
        273  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [33]
        276  invokevirtual java.io.PrintStream.println(java.lang.String) : void [37]
        279  return
          Line numbers:
            [pc: 0, line: 6]
            [pc: 2, line: 7]
            [pc: 12, line: 8]
            [pc: 14, line: 9]
            [pc: 34, line: 10]
            [pc: 36, line: 11]
            [pc: 56, line: 12]
            [pc: 59, line: 13]
            [pc: 72, line: 14]
            [pc: 78, line: 15]
            [pc: 84, line: 16]
            [pc: 91, line: 17]
            [pc: 98, line: 19]
            [pc: 120, line: 20]
            [pc: 142, line: 21]
            [pc: 164, line: 22]
            [pc: 187, line: 23]
            [pc: 210, line: 24]
            [pc: 233, line: 25]
            [pc: 256, line: 26]
            [pc: 279, line: 27]
          Local variable table:
            [pc: 0, pc: 280] local: args index: 0 type: java.lang.String[]
            [pc: 2, pc: 280] local: i index: 1 type: int
            [pc: 14, pc: 280] local: j index: 2 type: int
            [pc: 36, pc: 280] local: k index: 3 type: int
            [pc: 59, pc: 280] local: h index: 4 type: int
            [pc: 75, pc: 280] local: p1 index: 5 type: int
            [pc: 78, pc: 280] local: p2 index: 6 type: int
            [pc: 81, pc: 280] local: q1 index: 7 type: int
            [pc: 84, pc: 280] local: q2 index: 8 type: int
    }
      

  11.   

    居然过了但是检验的书上可能写错了
    !!~!!!!
    以下注意看可能理解错误了
    请教高手我记得一本书上写JAVA的编译器是贪婪的+++++会看成++和++和+
    i = i++ + ++i;  i=2这个为什么不错难道自动优化了
    h = ++h + ++h;  h=3还有这个东西为什么看成 ++h++ +h
      

  12.   

    i = 2
    j = 7
    k = 7
    h = 3
    p1 = 1
    p2 = 1
    q1 = 1
    q2 = 0
      

  13.   

    Java codeint i=0; 
                i= i+++++i;//2int j=0; 
                j=++j+ j+++ j+++ j++;//7int k=0; 
                k= k+++ k+++ k+++++k;//7int h=0; 
                h=++h+++h;//3int p1=0, p2=0;int q1=0, q2=0; 
                q1=++p1;//1            q2= p2++;//0 
    记住两点就好了  ++的优先级高于+运算  其次 就是k++和++k的区别  没啥难的 只要自己不乱 肯定没问题 没错!!up!!
    刚开始做的时候自己都做错了!!基础不好啊!
      

  14.   


    能知道编译器是贪婪的,这已经算不错了。
    你说得很对:i+++++i当然会看成++和++和+
    但楼主是:i+++ ++i;注意中间加了一个空格,这很重要,这是分隔符。这样就会看成:++,+,++了。
    这个不是什么自动优化,而是空格分隔符超了作用。
    同样:++h+++h会看成:++,++,+,从而编译错。而写成:++h+ ++h;中间加了一个空格,又是分隔符起作用了。这道题没有什么难度。若做错,是因为不了解++i,i++与赋值=运算次序。即:=运算是最后做的。
      

  15.   

    我不认为这种提有意义,这个应该是看运行的平台的吧!
      我记得以前我用VC++编译器写 
    int i = 0;
    int n = ++i + ++i;
    结果n是等于4的,第一个++i变成1,第二个++i变成2,最后是2+2=4然后我刚才用Eciplse运行式一了一下
    int n = (++i) + (++i);
    n等于3
    然后我改成相减去int n = (++i) - (++i);
    结果n等于-1,说明首先是第一个++i变成1,第二个++i变成了2,然后是1 - 2 = -1