黑马程序员技术交流社区

标题: 想问问 i=i+1与i+=1的区别 [打印本页]

作者: 潜伏    时间: 2013-11-17 20:05
标题: 想问问 i=i+1与i+=1的区别
谢谢,遇到这类问题老是不能彻彻底底的搞明白。求详解
作者: 帅气的冬瓜    时间: 2013-11-17 20:12
i=i+1;    牵扯到强制转化,如:int  i=2;
                                           i=(int)(i+1);  //把 i+1;的值转换为int型
i+=1;是 i 的值直接加2
作者: Weix1992    时间: 2013-11-17 20:12
没区别啊。。。。
i = i+1 的简写方式就是 i += 1
作者: 张佳鹏    时间: 2013-11-17 20:12
应该没有区别吧
作者: 张佳鹏    时间: 2013-11-17 20:13
应该没有区别吧
作者: hubby    时间: 2013-11-17 20:46
举个例子就明白了,
byte i=1;
i=i+1;这样编译错误,因为1是int型的,而i是byte型,会损失精度。
i+=1;这样编译就是正确的,因为这是i自增1.
作者: zbgl    时间: 2013-11-17 20:49
一样,只不过是写法不一样而已!
作者: 付凯鹏    时间: 2013-11-17 20:51
i++就是 先赋值,后运算      
赋值:就是将 等号右边的值赋给等号左边的值   
运算就是i 自己加1

++i就是先运算,后赋值     
  先运算就是 先k自己加一      
赋值就是把等号右边的赋给等号左边的
作者: 张天昊76    时间: 2013-11-17 21:04
如果i的类型是byte或者short的话,i+1运算时会自动提升表达式的类型,所以结果是int型,在赋值给byte(short)的i时,编译器会报需要强制转换类型的错误。由于+=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。相当于 i = (byte)(i + 1)
作者: vincentgood    时间: 2013-11-17 21:12
i=i+1是两次运算,先算i+1,然后将i+1的结果赋值给i,而i+=1则只有一次运算,就是把i+1的结果赋值给i,这其中只有一次运算
作者: jing迪    时间: 2013-11-17 21:33
i=i+1与i+=1不同是因为i=i+1做了2次运算   i+=1只做了1次运算
作者: 风逝    时间: 2013-11-17 21:54
有区别的,这要看i的类型,涉及java的转型
作者: 潜伏    时间: 2013-11-17 23:23
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
潜伏 发表于 2013-11-17 23:23
为什么i=i+1里面的1是就不byte类型?

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




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