int i = 2;
System.out.println(i + (i++));//输出为4
int i = 2;
System.out.println((i++) + i);//输出为5虽然不建议这么写代码,但是真有这种情况的,为什么?

解决方案 »

  1.   

    第一段代码 L0
      LINENUMBER 9 L0
      ICONST_2
      ISTORE 0
      L1
      LINENUMBER 10 L1
      GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
      ILOAD 0 //从index为0的地方载入i
      ILOAD 0 //同上
      IINC 0 1 //自增index为0的地方1
      IADD // 这里和index 0一点儿关系都没有了,结果当然是4
      INVOKEVIRTUAL java/io/PrintStream.println(I)V第二段代码   L0
        LINENUMBER 14 L0
        ICONST_2
        ISTORE 0
       L1
        LINENUMBER 15 L1
        GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
        ILOAD 0 //从index为0的地方载入i i=2
        IINC 0 1 //自增index为0的单元,这时候i=3了
        ILOAD 0 //从index为0的地方载入i,i=3
        IADD // 2+3=5
        INVOKEVIRTUAL java/io/PrintStream.println(I)V
      

  2.   

    java不清楚,但C++中得看编译器,不同编译器可能导致的结果不一样,另外楼主你都说不提倡这么写了,干嘛还为编译器的事纠结呢= =
      

  3.   

    额,很简单的,工程上可能不需要吧,但是搞研究的肯定要看一下,没有书可以参考
    看看JVM Specification,挂在java官网上