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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© (0.0)’ 高级黑马   /  2013-9-15 22:35  /  1576 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 (0.0)’ 于 2013-9-16 13:54 编辑

public static void main() {
        int i = 3;
        i = i++;
        System.out.println(i);
}
输出结果为:3 。
为什么呢?
有同学说,是 i 提取 3 赋值给缓存区中的 i 然后 i 就自增,最后语句完成,
输出语句时,要清空缓存区,而缓存区中的 i 的值覆盖掉 i 的值,所以输出时是输出的 3;

如果这样理解还好,但缓存区是什么呢?
如果不应该这么解释这道题,又如何理解呢?
希望来个大神帮解决。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

10 个回复

倒序浏览
int i = 3;
        i = i++;
        System.out.println(i);
javad对于自增或自减采用了中间缓存变量的机制
i=i++这句话可以拆分为
temp = i;  
i= temp + 1;  
i = temp;

所以输出为3。
要是把i=i++改成i=i+++i
temp = i;
i=temp+1;
i=temp+i
输出为7



评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报 1 0
i++  :表示先不加,运行之后,在加;
++i :表示先加,然后在进行运算;
example:若y=i++ ;则y=i;
              若y=++i ;则y=i+1;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
1098918523 发表于 2013-9-15 22:49
i++  :表示先不加,运行之后,在加;
++i :表示先加,然后在进行运算;
example:若y=i++ ;则y=i;

这个大部分的人都明白,你这回答有问题吧,
public static void main() {
        int i = 3;
        int y = i++;
        System.out.println(y);
}
输出结果为:4 。

你说的是这个意思吧。看清楚问题是结果是3  你这样说结果就会是4。
回复 使用道具 举报
i++;先输出i,后加1,所以输出是3,如果是++i;就是先加1,后输出,结果就是4.
回复 使用道具 举报
直接使用看不出区别,都是变量i加1
在赋值时才能进行区别,
如:
y=i++  // y的值为i (先引用,后运算)
y=++i  // y的值为i+1的结果 (先运算,后引用){:soso_e151:}
回复 使用道具 举报
(0.0)’ 发表于 2013-9-15 22:57
这个大部分的人都明白,你这回答有问题吧,
public static void main() {
        int i = 3;

可能我的回答太简单了,不过这个程序的结果y的确是3,并不是4;如果输出x的话,就是4
  1. static void Main()
  2.         {
  3.             int i = 3;
  4.             int y = i++;
  5.             Console.WriteLine("{0}", y);
  6.             Console.ReadKey();
  7.         }
复制代码
回复 使用道具 举报
i=3
1、i++,i==4,(i++)==3;
2、i++,i==4,(++i)==4;
回复 使用道具 举报
(0.0)’ 发表于 2013-9-15 22:57
这个大部分的人都明白,你这回答有问题吧,
public static void main() {
        int i = 3;

y是等于3的
回复 使用道具 举报
i=i++是因为i在自增之前先赋值给i,再自增,当执行到打印语句的时候就值打印出3了,如果你直接写i++,结果就为4.
回复 使用道具 举报
10楼正解{:soso_e179:} 学到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马