黑马程序员技术交流社区

标题: 关于运算符的一个小问题,求详解 [打印本页]

作者: love~陌    时间: 2014-3-11 19:13
标题: 关于运算符的一个小问题,求详解
short s = 3;

s=s+2;
s+=2;   
有什么具体的区别?
放大了讲,二者是等同的,但不是等价


作者: itpower    时间: 2014-3-11 19:15
如果声明的s是short类型,例如:
short s =2
s =s+2编译的时候会报错,因为s+2的时候会提升为int类型,然后再赋给short类型的s时会报错:损失精度。
s+=2则可以通过编译,因为它内部会有一个自动转换过程。
这应该是它们的主要区别
作者: centian2005    时间: 2014-3-11 19:38
对于short s1 = 2; s1 = s1 + 2; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。


     对于short s1 = 2; s1 += 2;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。


PS:数据类型的转换
java的数据类型在定义时已经确定了,因此不能随意转换成其他类型的数据类型,但java允许用户有限度的做类型转换处理。
java会在下列条件都成立时,自动做数据转换类型
1 转换前的数据类型与转换后的类型兼容
2 转换后的数据类型的表示范围比转换前的类型大




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