黑马程序员技术交流社区
标题:
关于++i和i++
[打印本页]
作者:
程钧杰
时间:
2011-9-1 10:01
标题:
关于++i和i++
为什么每次运行出来的都是0~9
for(int gf=0 ;gf<10;gf++)
System.out.println(gf);
for(int gf1=0 ;gf1<10;++gf1)
System.out.println(gf1);
复制代码
不是说前加和后加有区别的么 每次for之后 gf=gf++ 和 gf1=++gf1
作者:
杨相国
时间:
2011-9-1 10:14
首先你要弄清楚一点:不管到底怎样自增,gf++和++gf1这两个表达式运算的最终结果都是gf加了1和gf1加1,而条件判断的时候只看gf和gf1的值,也就是说只看后面的自增表达式对判断这个值的影响
另外一点:由于gf++和++gf1没有付给任何变量,所以是个匿名的表达式,如果把它各自都赋给一个变量的话 就像你写的 a=gf++ 和 b=++gf1这样打印出来的a和b就不一样了
[
本帖最后由 杨相国 于 2011-09-01 10:17 编辑
]
作者:
匿名
时间:
2011-9-1 10:42
下面就前加和后加进行比较将你的程序中的gf和gf1当做i来说明:
i = 0时,i++是先引用i的然后再变量本身自己再加1,所以i++这个表达式的值为0,而i的值为1。
++i是变量本身先自己加1然后再被引用,即++i的值为1,i的值也为1。
i = 1时,i++表达式的值为1,i的值为2。
++i表达式的值为2,i的值为2。
i = 2时,i++表达式的值为2,i的值为3。
++i表达式的值为3,i的值为3。
。。。
依次类推,++i和i++当然不一样,而你的for语句中每次i++或++i后比较的都是i<10;因为i的值在两个for循环中都相等(每次变化后),而你这时输出的正好是变量i的值,所一样,如果输出i++或++i肯定不一样。
你比较的并不是i++<10或者是++i<10。
你将你的程序中的gf<10换成gf++<10,将gf1<10换成++gf1<10,这时你输出表达式gf++或++gf1的值结
果肯定不一样。
其实++i和i++很简单,先加和后加后的表达式的值和变量的分别是多少,再看程序引用的是表达式的还是
变量的值就不会乱了。。
作者:
李叶
时间:
2011-9-1 11:51
这个问题上面的童鞋的确已经回答的非常好了,所以在这里我就不再重复回答了~
不过为了方便LZ理解,我再补充一段等价写法吧:
使用i++的循环:
[code=java]//原始代码:
for(int gf=0 ;gf<10;gf++) {
System.out.println(gf);
}
//等价写法:
int gf=0;
while (gf<10) { //首先判断gf的值
gf++; //然后gf的值自增1
System.out.println(gf); //然后打印出gf的值
}[/code]
使用++i的循环:
[code=java]//原始代码:
for(int gf1=0 ;gf1<10;++gf1) {
System.out.println(gf1);
}
//等价写法:
int gf1=0;
while (gf1<10) { //同样是首先判断gf1的值
++gf1; //然后gf1的值自增1
System.out.println(gf1); //然后打印出gf1的值
}[/code]比较一下使用++i的循环和使用i++的循环中的等价写法
再去理解上面的回答就好了~
此外,对于++i和i++的区别
在
http://bbs.itheima.com/thread-1317-1-1.html
这个帖子里有说明
[
本帖最后由 李叶 于 2011-09-01 12:05 编辑
]
作者:
匿名
时间:
2011-9-1 11:54
我觉得这和for循环中的表达式的执行顺序有关,首先执行参数中第一个表达式,gf赋值为0,在判断参数中的第二个表达式是否为真,为真执行for循环体内语句,之后在执行参数中第三个表达式,这时gf后自增1,然后再判断参数中第二个表达式的真假,为真,执行循环体内语句,注意,这时的gf已经自增过1了。
第二个for循环,gf1前自增,在输出之前它已经自增过了。所以两个for循环 语句输出的结果是一样的。
个人认为董洁俊的回答很好,对于前自增和后自增就看你引用的是表达式还是变量了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2