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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© micro_hx 中级黑马   /  2015-6-30 21:09  /  765 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 ???   求解答 !!!



评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

16 个回复

倒序浏览
一个语句中既有算术运算符又有赋值运算符,会首先进行算术运算符
而赋值运算符的运算方法是从左到右,
你写成  i += i-= i*i,既是i+=i-=144,
然后它会先进行  i+=i,既i=24
最后才进行i-=144,,既i=-120.

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

ooo,好吧 谢谢啊 刚开始学 有些东西真心不是很懂啊。。。。
回复 使用道具 举报
好吧,看晕了
回复 使用道具 举报

主要是对运算符号优先级的考虑
回复 使用道具 举报
一楼的解释的很好啊
回复 使用道具 举报
ZhangHeng 发表于 2015-6-30 22:44
一个语句中既有算术运算符又有赋值运算符,会首先进行算术运算符
而赋值运算符的运算方法是从左到右,
你写 ...

厉害!
回复 使用道具 举报
也算是学习了
回复 使用道具 举报
学习了,刚开始也给搞懵了
回复 使用道具 举报
学习了,第一次了解
回复 使用道具 举报
本帖最后由 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的方式思考,不要用自己的思维。。开发中绝不允许写这样的代码
回复 使用道具 举报
路过学习了
回复 使用道具 举报
学习了!
回复 使用道具 举报
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:50
15#
学习了。
回复 使用道具 举报
恩恩。就是考运算符的优先级运算。
回复 使用道具 举报
一楼解释的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马