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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int i=2;
i=i++;
System.out.println(i);
//++放后面不是先代入运算,再加1吗?为什么i还是等于2?

17 个回复

倒序浏览
本帖最后由 武静涛 于 2016-7-17 20:11 编辑

i++:先赋值,再自增。i=i++意思是,先把i的值赋值给左边的 i,然后 i自增。因为 i 自增以前的值为2,所以输出的值为2.
回复 使用道具 举报
因为i被赋值为2之后的自增过程是 将(另一个内存中)局部变量i的自增. 然而主mian中的i会把2赋给那个局部i,结果就是2
回复 使用道具 举报
先赋值  再自增
回复 使用道具 举报
上边说的对.....
回复 使用道具 举报
++在右边,先运算后自身加1,所以运算后i为2;++在左边的时候,先加1,再运算。
回复 使用道具 举报
i++ 这个操作:先拿出 i 中的值,在进行自增 1
回复 使用道具 举报
i++ 这个操作:先拿出 i 中的值,在进行自增 1   

个人认为:
1. i进行复制操作之后,自增的操作就根本没有进行,就被输出了,并且程序结束了。
2. 变量 i 只有一个,i++  ===>  i=i+1, 假如我们进行了这个操作,那变量的值肯定会被改变,
只是 什么时候执行 i+1 这个操作,在什么之后执行,我也不是很清楚。
回复 使用道具 举报
i++单独使用的时候,i++,跟++i都是一样的,因为这句话后面有分号,代表这句已经结束了,即i已经完成自增,后面再用i就是增长过的了
回复 使用道具 举报
上边说的对
回复 使用道具 举报
直接i++,不用赋值。
回复 使用道具 举报
上面的解释很清楚了
回复 使用道具 举报
M_J 初级黑马 2016-7-19 01:03:38
13#
就是2呀
回复 使用道具 举报
本帖最后由 HEBEIREN 于 2016-7-19 08:41 编辑

你要理解,自增和自减的这个时间是很短的,i用完之后,立刻就会自增,所有在执行输出语句之前,i的值已经增加了。所以i的值就会变成2,自减也是一样的,变量放到后面也是一样,就是运算的顺序变了而已。
回复 使用道具 举报
不会的话,多看几遍视频
回复 使用道具 举报
int i = 2;定义了一个变量i,变量是内存中一块存储空间,用来存储常量数据.变量空间可以重复使用
i = i++, 这是一个整体表达式,它的需求是把右边表达式的值赋值给左边, i++是先执行再自增,把i的值(常量2)赋值给i(代表变量i),这是这一行整体表达式最终的结果.是i = 2,2的值赋值给i(整体的结果);整体中有一部分是 i++,i 自增变成存储3;
重点是,部分是整体的一部分,相当于就是变量的存储空间存储3之后又存储2,最终是2(i = 3;然后i = 2,结果是2)
回复 使用道具 举报
本帖最后由 你的昵称 于 2016-7-19 10:18 编辑

i=i++ 是先运算后自增!需要改成先自增后运算i=++i
  1. public class Ijiajia {
  2.         public static void main(String[] args) {
  3.                 int i=2;
  4.                <span style="line-height: 30.7999992370605px; background-color: rgb(255, 255, 255);">i=++i </span><span style="line-height: 2.2em;"> ;</span>
复制代码

结果是3.
回复 使用道具 举报
赋值运算优先于++,如果想要等于3需要将++放在前面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马