黑马程序员技术交流社区

标题: i=i++ [打印本页]

作者: 张冉冉    时间: 2012-4-25 10:10
标题: i=i++
本帖最后由 张冉冉 于 2012-4-26 14:39 编辑

曾经朋友发现了这个问题,i=i++,运行后,i值不变,谁能帮忙解释下呢?
作者: kevindavid    时间: 2012-4-25 10:14
本帖最后由 kevindavid 于 2012-4-25 10:30 编辑

  public static void main(String[] args){
                int i=2;
                i=i++;
                System.out.println(i);
        }
你把“i=i++”改成“i=++i”你的是这个是i先赋值给了“i”然后再执行的++所以就没有将++后的值赋给“i”这个操作 ;++在数值前面就是先执行++再数值后面就是后执行++
  public static void main(String[] args)
   {
                int i=2;
                i=++i;
                System.out.println(i);
        }

作者: 刘永菲    时间: 2012-4-25 10:16
能否把源代码贴上来?猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址
作者: 张冉冉    时间: 2012-4-25 10:16
        public static void main(String[] args){
                int i=2;
                i=i++;
                System.out.println(i);
        }
作者: 褚代江    时间: 2012-4-25 10:17
i=i++,应该和i=++i区别,
i=i++  的意思是 执行i=i之后i再加1
i=++i 的意思是 i先加1,在执行赋值语句

作者: 邱俊杰    时间: 2012-4-25 10:55
楼主、i++呢、是程序是先用 i  再自加的。 ++i 是先加再用的。这个必须搞清楚。
  1. int i=0;
  2.                 System.out.println(i=i++);
  3.                 System.out.println(i=++i);
  4.                 //结果是0 和 1  你懂了吧?
复制代码

作者: 张冉冉    时间: 2012-4-25 11:52
表面的东西我也懂,我想知道更深点的东西,内部机制啥的。
作者: 魏征    时间: 2012-4-25 11:53
     public static void main(String[] args){
                int i=2;
                i=i++;
                System.out.println(i);
        }
i=i++是先赋值后自增。int i=2在i=i++中,先把值2赋给了i,在复制完成后值2自增一次,当却没有把值赋给i,所以打印的结果是2.
作者: 张棣    时间: 2012-4-25 12:03
前自加:++ i  和后自加i ++中的 i 都自身加一(就是说 i 原值是1,自加后就是2,不管是前自加还是后自加。)

但将自加 赋值 时就不一样了:

i = ++ i  是将++i的值赋值给i;(i = ++i)
i = i ++  是先将 i 的值先赋值给i;(i = i)


自加跟自减是一样的、(建议先强记)


作者: HeiMaYSL    时间: 2012-4-25 12:23
public static void main(String[] args){
                 int i=2;
                 i=i++;
                 System.out.println(i);
         }
这个问题主要是:i=i++和i=++i区别

i=i++ : 程序会先执行i=i之后i ,此时,在栈内存里,存了个,i=2;因为,栈内存里存的有变量等等,而堆内存里存储的有对象等等;所以,就先把2赋给了i。

i=++i : 程序会先执行++1,可以把它看成"i=(i+1)"在执行赋值语句,也就是说"+"在前边就现在+号吗,那就是i=2+1了。所以,这样的话,结果就会变了。


猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址

作者: 付左军    时间: 2012-4-25 14:48
i=i++先赋值在自增,++i先自增,在赋值

作者: 胡奎    时间: 2012-4-25 15:25
前自加:++ i  和后自加i ++中的 i 都自身加一

但将自加后 赋值 时就不一样了:

i = ++ i  是将++i的值赋值给i;(i = ++i)
i = i ++  是先将 i 的值先赋值给i;(i = i)






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