int b = 10;
        b = b++;
        System.out.println(b);                // 输出10那个+1的操作怎么没了,不管++在前还是在后都应该有一个+1的操作吧,那么这个操作是在什么时候什么地方执行的。

解决方案 »

  1.   

    b++ 和 ++b 不同,b++是先赋值然后加1,而++b是先加1 然后赋值
      

  2.   


    int b = 10;
     int c = b++;
      System.out.println(b); // 输出11
      System.out.println(c); // 输出10
      

  3.   

    怎么算保存起来呢
    int b = 10;
    b++;
    System.out.println(b); // 输出11int b = 10;
    b = b++;
    System.out.println(b); // 输出10b++操作可以理解为b=b+1
    那么b=b++我理解成
    b=b=10;
    b=b+1;
    这样就是赋值后再加了,我这样理解有什么错?
      

  4.   


      int c,b = 10;
      c = b++;
      System.out.println(c); //10
      System.out.println(b); //11
    这是显然的解释lz这种情况只能这样,b++是先将b值存储起来,然后b执行++,再把开始存储起来的值赋给了b 所以b还是没变
      

  5.   

    java是传值引用的也就是说你把东西放进去,
    没有return出来的话,值是不会改变的。
    所以打印的还是10
      

  6.   

    能不能说的具体些 为什么没有return出来
    b=b++和b++有什么区别
      

  7.   

    个人理解下
    b=b++
    先做了b=b
    然后你想做的b++中的原始b其实已经不存在了。只是做了5++,但是没有任何变量=这个5++了,其实编译器应该抛弃了++这个运算吧
      

  8.   

    这是我当时看的代码,其实感觉i++和++i 具体讨论没啥用。代码1:public class Test{    
    public static void main(String[] args){         int i=0;         i=i++;          System.out.println(i);     }}
    结果i依然是0.分析其反编译后的代码:public static void main(java.lang.String[]);   
    Code:   0:    iconst_0     //0放到栈顶   1:    istore_1    //把栈顶的值保存到局部变量1,也就是i中   2:    iload_1     //把i的值放到栈顶,也就是说此时栈顶的值是0   3:    iinc    1, 1 //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。   6:    istore_1     //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0   7:    getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;   10:   iload_1   11:   invokevirtual    #3; //Method java/io/PrintStream.println:(I)V   14:  return值得注意到是i被修改了两次,第一次是i++;i变为1,最后一次是i=0;所以结果i是0代码2:public class Test2{    
    public static void main(String[] args){         int i=0;         int j=0;          j=i++;          System.out.println(i);          System.out.println(j);     }}这个结果肯定都知道,i是1,j是0.同样看反编译之后的代码:public static void main(java.lang.String[]);   
    Code:   0:    iconst_0   1:    istore_1     //i=0   2:    iconst_0   3:    istore_2     //j=0   4:    iload_1      //把i的值放到栈顶,也就是说此时栈顶的值是0   5:    iinc    1, 1 //局部变量1加1,也就是让i++了,此时i已经是1了,上面说过,此指令不会导致栈变化   8:    istore_2     //把栈顶的值(注意是0)存入局部变量2,也就是j中,所以j=0   9:    getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;   12:   iload_1   13:   invokevirtual    #3; //Method java/io/PrintStream.println:(I)V   16:   getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;   19:   iload_2   20:   invokevirtual    #3; //Method java/io/PrintStream.println:(I)V   23:  return很明显可以看出,java是先把i的值取出来放到栈顶,我们可以认为是引入了第三个变量int k=i;然后i++,这时候i为1了,然后让j=k;也就是0.结论,i的++运算是在对j这个变量的赋值之前完成的。代码3:public class Test3{    public static void main(String[] args){         int i=0;         int j=0;          j=++i;          System.out.println(i);          System.out.println(j);     }}结果大家也都知道,i=1,j=1看操作过程:public static void main(java.lang.String[]);   Code:   0:    iconst_0      1:    istore_1    //i=0   2:    iconst_0   3:    istore_2     //j=0   4:    iinc    1, 1   //局部变量i加1,这时候i变成1了 。   7:    iload_1     //把i的值放到栈顶,栈顶的值是1   8:    istore_2    //j=1   9:    getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;   12:   iload_1   13:   invokevirtual    #3; //Method java/io/PrintStream.println:(I)V   16:   getstatic    #2; //Field java/lang/System.out:Ljava/io/PrintStream;   19:   iload_2   20:   invokevirtual    #3; //Method java/io/PrintStream.println:(I)V   23:  return对比代码2和代码3,关键的差别就是iload_1   个iinc这两条指令的位置变了。