黑马程序员技术交流社区

标题: 问个小问题啊 [打印本页]

作者: micro_hx    时间: 2015-6-30 21:09
标题: 问个小问题啊
  1.         @Test
  2.         public void testInt(){
  3.                 int i = 12 ;
  4.                 System.out.println(i += i-= i*i);
  5.         }
复制代码

为什么所得的结果是 -120 ?? ??
  我的思路是 : i -= 144 ; i = 12 - 144 = -122 ; i+= -122 =- 244 ???   求解答 !!!




作者: ZhangHeng    时间: 2015-6-30 22:44
一个语句中既有算术运算符又有赋值运算符,会首先进行算术运算符
而赋值运算符的运算方法是从左到右,
你写成  i += i-= i*i,既是i+=i-=144,
然后它会先进行  i+=i,既i=24
最后才进行i-=144,,既i=-120.

你要先了解这些运算符的特性,不能贪方便,盲目放在一起。
作者: micro_hx    时间: 2015-6-30 23:18
ZhangHeng 发表于 2015-6-30 22:44
一个语句中既有算术运算符又有赋值运算符,会首先进行算术运算符
而赋值运算符的运算方法是从左到右,
你写 ...

ooo,好吧 谢谢啊 刚开始学 有些东西真心不是很懂啊。。。。
作者: wx_J25HxI5W    时间: 2015-6-30 23:21
好吧,看晕了
作者: micro_hx    时间: 2015-7-1 07:49
wx_J25HxI5W 发表于 2015-6-30 23:21
好吧,看晕了

主要是对运算符号优先级的考虑
作者: 雏鹰起飞    时间: 2015-7-1 08:22
一楼的解释的很好啊
作者: 水壶vs兔子    时间: 2015-7-1 08:27
ZhangHeng 发表于 2015-6-30 22:44
一个语句中既有算术运算符又有赋值运算符,会首先进行算术运算符
而赋值运算符的运算方法是从左到右,
你写 ...

厉害!
作者: 尽在不言中    时间: 2015-7-1 12:53
也算是学习了
作者: jake_liu    时间: 2015-7-1 13:51
学习了,刚开始也给搞懵了
作者: zlpiano    时间: 2015-7-1 14:32
学习了,第一次了解
作者: as604049322    时间: 2015-7-1 15:08
本帖最后由 as604049322 于 2015-7-1 15:10 编辑

i=i+(i=(i-i*i))
i=12+(i=(12-12*12))
i=12+(i=-132)
i=12-132=-120
这种东西要拆开了按jvm的方式思考,不要用自己的思维。。开发中绝不允许写这样的代码

作者: 一口老郭    时间: 2015-7-1 17:04
路过学习了
作者: 自行车呢    时间: 2015-7-1 18:40
学习了!
作者: micro_hx    时间: 2015-7-1 20:26
as604049322 发表于 2015-7-1 15:08
i=i+(i=(i-i*i))
i=12+(i=(12-12*12))
i=12+(i=-132)

谢谢。。理解了
作者: 为了理想而奋斗    时间: 2015-7-1 21:10
学习了。
作者: 进军黑马    时间: 2015-7-1 21:28
恩恩。就是考运算符的优先级运算。
作者: 贾森    时间: 2015-7-1 22:54
一楼解释的不错




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