A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张冉冉 初级黑马   /  2012-4-25 10:10  /  2409 人查看  /  11 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张冉冉 于 2012-4-26 14:39 编辑

曾经朋友发现了这个问题,i=i++,运行后,i值不变,谁能帮忙解释下呢?

11 个回复

倒序浏览
本帖最后由 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);
        }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
能否把源代码贴上来?猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址
回复 使用道具 举报
        public static void main(String[] args){
                int i=2;
                i=i++;
                System.out.println(i);
        }
回复 使用道具 举报
i=i++,应该和i=++i区别,
i=i++  的意思是 执行i=i之后i再加1
i=++i 的意思是 i先加1,在执行赋值语句

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
楼主、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:53:50
8#
     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:20
9#
前自加:++ i  和后自加i ++中的 i 都自身加一(就是说 i 原值是1,自加后就是2,不管是前自加还是后自加。)

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

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


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

回复 使用道具 举报
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了。所以,这样的话,结果就会变了。


猜想是可能赋值是出现问题。堆内存不变,栈内存读到的依然是原址
回复 使用道具 举报
i=i++先赋值在自增,++i先自增,在赋值
回复 使用道具 举报
前自加:++ i  和后自加i ++中的 i 都自身加一

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

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马