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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潜伏 中级黑马   /  2013-11-17 20:05  /  2170 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谢谢,遇到这类问题老是不能彻彻底底的搞明白。求详解

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 如果只运行一次。本质上好像没有区别~.

查看全部评分

18 个回复

倒序浏览
i=i+1;    牵扯到强制转化,如:int  i=2;
                                           i=(int)(i+1);  //把 i+1;的值转换为int型
i+=1;是 i 的值直接加2
回复 使用道具 举报
没区别啊。。。。
i = i+1 的简写方式就是 i += 1
回复 使用道具 举报
张佳鹏 来自手机 初级黑马 2013-11-17 20:12:53
板凳
应该没有区别吧
回复 使用道具 举报
张佳鹏 来自手机 初级黑马 2013-11-17 20:13:22
报纸
应该没有区别吧
回复 使用道具 举报
举个例子就明白了,
byte i=1;
i=i+1;这样编译错误,因为1是int型的,而i是byte型,会损失精度。
i+=1;这样编译就是正确的,因为这是i自增1.
回复 使用道具 举报
zbgl 中级黑马 2013-11-17 20:49:41
7#
一样,只不过是写法不一样而已!
回复 使用道具 举报
i++就是 先赋值,后运算      
赋值:就是将 等号右边的值赋给等号左边的值   
运算就是i 自己加1

++i就是先运算,后赋值     
  先运算就是 先k自己加一      
赋值就是把等号右边的赋给等号左边的
回复 使用道具 举报
如果i的类型是byte或者short的话,i+1运算时会自动提升表达式的类型,所以结果是int型,在赋值给byte(short)的i时,编译器会报需要强制转换类型的错误。由于+=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。相当于 i = (byte)(i + 1)
回复 使用道具 举报
i=i+1是两次运算,先算i+1,然后将i+1的结果赋值给i,而i+=1则只有一次运算,就是把i+1的结果赋值给i,这其中只有一次运算
回复 使用道具 举报
i=i+1与i+=1不同是因为i=i+1做了2次运算   i+=1只做了1次运算
回复 使用道具 举报
风逝 中级黑马 2013-11-17 21:54:38
12#
有区别的,这要看i的类型,涉及java的转型
回复 使用道具 举报
潜伏 中级黑马 2013-11-17 23:23:32
13#
hubby 发表于 2013-11-17 20:46
举个例子就明白了,
byte i=1;
i=i+1;这样编译错误,因为1是int型的,而i是byte型,会损失精度。

为什么i=i+1里面的1是就不byte类型?
回复 使用道具 举报
松毛 高级黑马 2013-11-18 08:53:52
14#
潜伏 发表于 2013-11-17 23:23
为什么i=i+1里面的1是就不byte类型?

因为单个1默认的是int型数据,i+1后,因为i是byte型,1是int型的,相加以后的数值就会被自动提升为int型的。而等于号前面的i还是属于byte型的,将一个int型的数据装入byte型的结果中就会出现问题了!
回复 使用道具 举报
这两天这个问题问的很多,标题都很相似,看下别人的帖子和回答
回复 使用道具 举报
+=是一个复制运算符,如果左右两边的数据类型不一致,会有一个自动强制转化过程,但是i=i+1 如果运算结束后左右两边的数据类型不一致就会报错   可能会损失精度
回复 使用道具 举报
孙鑫 中级黑马 2013-11-18 17:14:09
17#
i=i+1使用的是复合赋值运算
i+=1使用的是简单赋值运算
两者的区别是:复合赋值运算符会自动地将运算结果转型为其左操作数的类型。
回复 使用道具 举报
徐君 中级黑马 2013-11-18 18:21:05
18#
i+=1其实就是i=i+1;这样看是一样,但是涉及到类型转换了,就不一样了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马