黑马程序员技术交流社区

标题: java中 z+=x等价于z=z+x 这是为什么?? [打印本页]

作者: 迷路的小孩儿    时间: 2015-6-7 20:25
标题: java中 z+=x等价于z=z+x 这是为什么??
java中  z+=x等价于z=z+x    这是为什么????怎么感觉有点不懂呢。
作者: 付欢    时间: 2015-6-7 20:33
两种不同方式的写法而已
作者: 岑寂    时间: 2015-6-7 20:44
两种在int类型的情况下才是等同的,当你前面定义z为baye类型的时候z+=x,他会自动转换类型,而z=z+x的时候是会报错的,因为z会被强制转换,而你定义的z有不是int的情况下
作者: 八戒    时间: 2015-6-7 20:45
我是这样理解的,这是java的一种特殊的运算,+=就是自身加加,需要注意的是 z+=x和z=z+x的区别是+=运算后类型不会提升,而第二种运算会提升类型,比如 z是byte类型的,那么+=运算后还是byte类型,但是如果第二种运算就会报错,因为类型提升,导致的缺失精度,懂了吧,纯手工 嘿嘿
作者: 迷路的小孩儿    时间: 2015-6-7 20:47
付欢 发表于 2015-6-7 20:33
两种不同方式的写法而已

可以详细说一下么  谢谢  有点不太明白 为什么他们等价  
作者: 迷路的小孩儿    时间: 2015-6-7 20:48
岑寂 发表于 2015-6-7 20:44
两种在int类型的情况下才是等同的,当你前面定义z为baye类型的时候z+=x,他会自动转换类型,而z=z+x的时候是 ...

你好    谢谢     可以详细说一下吗       有点不太明白     为什么他们等价呢
作者: 迷路的小孩儿    时间: 2015-6-7 20:51
八戒 发表于 2015-6-7 20:45
我是这样理解的,这是java的一种特殊的运算,+=就是自身加加,需要注意的是 z+=x和z=z+x的区别是+=运算后类 ...

:)    谢谢   你可以再跟我说说   z+=x为什么等价z=z+x   
作者: 八戒    时间: 2015-6-7 20:58
迷路的小孩儿 发表于 2015-6-7 20:51
谢谢   你可以再跟我说说   z+=x为什么等价z=z+x

这是java中的一种运算符,你不必要纠结它为什么要等于另一个,你只要记住他们俩的区别就行,面试不会问你为什么会等价的,但是可能会问你他们之间的区别,懂?
作者: 岑寂    时间: 2015-6-7 20:59
迷路的小孩儿 发表于 2015-6-7 20:48
你好    谢谢     可以详细说一下吗       有点不太明白     为什么他们等价呢  ...

也不完全等价啊!还要看两个变量是什么类型的!如果把x当作1,z又是in类型的话其实z+=x就像z=z+x的简写啊!
作者: QQheima    时间: 2015-6-7 21:04
你可以查查java中自定义运算符重载的知识,然后看看+=是怎么实现功能的
作者: 迷路的小孩儿    时间: 2015-6-7 21:13
八戒 发表于 2015-6-7 20:58
这是java中的一种运算符,你不必要纠结它为什么要等于另一个,你只要记住他们俩的区别就行,面试不会问你 ...

好的     谢谢啦
作者: 迷路的小孩儿    时间: 2015-6-7 21:16
QQheima 发表于 2015-6-7 21:04
你可以查查java中自定义运算符重载的知识,然后看看+=是怎么实现功能的

谢谢      
作者: 迷路的小孩儿    时间: 2015-6-7 21:18
岑寂 发表于 2015-6-7 20:59
也不完全等价啊!还要看两个变量是什么类型的!如果把x当作1,z又是in类型的话其实z+=x就像z=z+x的简写啊 ...

谢谢     
作者: mah707    时间: 2015-6-7 22:22
+=,/=,*=,-=扩展运算符,是将左右两边相加再将值赋值给左边,其中包含了对左边类型的强制类型转换,而分开写的话会有编译报错提示类型不匹配,需要记住的就是这其中的类型转换。
作者: 林RM    时间: 2015-6-7 23:34
格式问题而已,应该没有为什么
作者: ZYZQ    时间: 2015-6-7 23:34
不光是java啊,语言特性
作者: 郭.威    时间: 2015-6-8 00:10
这种写法意思就是:把左右俩边的相加   然后再把值  赋给  左边
作者: zhenxing133    时间: 2015-6-8 00:25
路过学知识
作者: heima591046495    时间: 2015-6-8 00:35
+=的意思就是把左边和右边的变量相加再赋值给左边,
作者: MissMr.    时间: 2015-6-8 00:49
有的东西不需要问为什么,只需要记住即可
作者: 灵界    时间: 2015-6-8 01:07
在一般情况下等价,有一种特殊情况不等价,一般情况可以看基础视频或者书知道。特殊情况就是z和x的数据类型不一致时,可能会出错。
作者: sanmy_lin    时间: 2015-6-8 01:12
简写方式而已
作者: 迷路的小孩儿    时间: 2015-6-8 07:53
mah707 发表于 2015-6-7 22:22
+=,/=,*=,-=扩展运算符,是将左右两边相加再将值赋值给左边,其中包含了对左边类型的强制类型转换,而分 ...

谢谢你的详细回答   :)  
作者: 迷路的小孩儿    时间: 2015-6-8 07:57
灵界 发表于 2015-6-8 01:07
在一般情况下等价,有一种特殊情况不等价,一般情况可以看基础视频或者书知道。特殊情况就是z和x的数据类型 ...

谢谢         
作者: 迷路的小孩儿    时间: 2015-6-8 07:58
谢谢大家的回答。对我很有帮助。谢谢。
作者: hnyzhlq    时间: 2015-6-8 10:17
固定写法,记住就好
作者: zlsucceed    时间: 2015-6-8 10:23
把视频仔细的再看一遍 就知道了
作者: 李志鹏    时间: 2015-6-8 12:40
简写格式
作者: Smile小思    时间: 2015-6-8 16:12
个人觉得这就是java的一个设定,一个运算符而已,就好像 自增 ++ ,那么为什么++等价于+1?这个问题就好像为什么1+1=2,我个人觉得你可以把+=看做类似++的运算符,他们的区别仅仅在于++就是+1后赋值,而+=是加上等号后面的数值后赋值,至于使用中需要注意的,好吧其实楼上有人说过了,+=运算后数据类型是不会提升的




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