黑马程序员技术交流社区

标题: 关于自增的问题 [打印本页]

作者: 爱上这格调    时间: 2013-9-19 09:29
标题: 关于自增的问题
本帖最后由 杨增坤 于 2013-9-19 11:51 编辑

class Demo01
{
        public static void main(String[] args)
        {
                int  i;
                 i = 0;
                 i = i++;
                System.out.println(i);
         }
}输出结果为什么会是0;i初值为0,先把0赋给i然后自增了1输出结果不就是应该是1吗
作者: (0.0)’    时间: 2013-9-19 09:44
呵呵,这个开始我也没想明白,其实你可以这样看:
1、在自增前,i 的值放在了一个临时内存中。
2、这时 i 的值自增为 1,等式左边的就运算完了。
3、这时就开始赋值运算,而赋值给左边的 i 时,是用临时内存中的值来赋值。

作者: 刘亮    时间: 2013-9-19 09:48
注意a++;和++a的用法。 前者是后自加,后者是前自加。比如你的这个题,先把a的值赋给a,然后a的值+1,存储到内存空间,于是a输出的值就是0,而存储在内存的值是11. 如果这个题是++a的话,输出的值就是1.了。
作者: 路边小色狼    时间: 2013-9-19 09:49
i=i++ 与i=++i 的区别
i=i++是先把0赋给i,然后i+1并没有赋值给i
你先别全用i,你用不同变量来试
  1. public class D6 {


  2.         public static void main(String[] args) {
  3.                 int a=0; int b=1;
  4.                 a=b++;
  5.                 System.out.println(a+""+b);

  6.         }

  7. }
复制代码

作者: 吴光新    时间: 2013-9-19 09:52
i++   先用后加,你先打印完了,才自增。
++i   先加后用,先自增了,才打印
作者: 369833818    时间: 2013-9-19 09:58
++i是运算前先自增
i++是运算后自增

作者: 1098918523    时间: 2013-9-19 10:13
        i++  :表示先不加,运行之后,在加;
        ++I :表示先加,然后在进行运算;
example:y=i++ :y=i;
                y=++I :y=i+1;

作者: doevents    时间: 2013-9-19 10:31
  i = i++;你这句是先赋值给i,然后打印完i后才自增的,如果直接写成 i++ 或者写成 ++i 就是1了。
作者: sil    时间: 2013-9-19 11:08
对于 i++ 或者++i 这些容易出事儿的玩意儿,我宁愿不用啊。。。。。。 为了让程序不那么成为“折磨人的存在”,还是写清楚比较好,比如 i=i+1;之类。
作者: 狼人→浪人    时间: 2013-9-19 11:41
class Demo01
{
         public static void main(String[] args)
         {
                     i=i++; //此时右边i=0先赋值给左边,右边i++更新内存(但是下面调用的是内存更新前的i!!有点绕,我是这样理解)
                    
                    /*
                     i++;      //更新内存
                    System.out.println(i);  //只会输出内存里面i=1
                     */
                 System.out.println(i);   //输出的是i++前的i(内存更新前的i),但是到此时内存里面的实际值是1

        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2