黑马程序员技术交流社区

标题: i=i++; 基础小问题,自增问题 [打印本页]

作者: (0.0)’    时间: 2013-9-15 22:35
标题: i=i++; 基础小问题,自增问题
本帖最后由 (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;

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


作者: 1098918523    时间: 2013-9-15 22:49
i++  :表示先不加,运行之后,在加;
++i :表示先加,然后在进行运算;
example:若y=i++ ;则y=i;
              若y=++i ;则y=i+1;

作者: (0.0)’    时间: 2013-9-15 22:57
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。

作者: 光脚丫的小白兔    时间: 2013-9-15 23:01
i++;先输出i,后加1,所以输出是3,如果是++i;就是先加1,后输出,结果就是4.
作者: 李锡碧    时间: 2013-9-15 23:02
直接使用看不出区别,都是变量i加1
在赋值时才能进行区别,
如:
y=i++  // y的值为i (先引用,后运算)
y=++i  // y的值为i+1的结果 (先运算,后引用){:soso_e151:}
作者: 1098918523    时间: 2013-9-15 23:06
(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.         }
复制代码

作者: Yuan先生    时间: 2013-9-15 23:07
i=3
1、i++,i==4,(i++)==3;
2、i++,i==4,(++i)==4;
作者: masterV    时间: 2013-9-15 23:52
(0.0)’ 发表于 2013-9-15 22:57
这个大部分的人都明白,你这回答有问题吧,
public static void main() {
        int i = 3;

y是等于3的

作者: doevents    时间: 2013-9-16 00:09
i=i++是因为i在自增之前先赋值给i,再自增,当执行到打印语句的时候就值打印出3了,如果你直接写i++,结果就为4.
作者: 张文豪    时间: 2013-9-16 00:28
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




作者: 破浪    时间: 2013-9-16 00:51
10楼正解{:soso_e179:} 学到了




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