黑马程序员技术交流社区
标题:
关于隐式类型转换的问题
[打印本页]
作者:
fiend
时间:
2012-7-28 11:08
标题:
关于隐式类型转换的问题
Java规范说复合赋值运算符会隐式的类型转换
那就是说 b = b + 3; 和 b += 3; 并不等价对吗?
作者:
黄珊珊
时间:
2012-7-28 12:02
b = b+3;右边先做加法运算,再将和赋给左边;
b += 3;只做一个赋值运算,还有一个自动转换动作。
但在同类型的时候,b += 3;等同运算b = b+3;
作者:
李菁
时间:
2012-7-28 12:27
b = b + 3; 和 b += 3; 是等价的
+不会影响内存,+=会消耗内存
作者:
纪艺松
时间:
2012-7-28 12:36
两者是一样的;
QQ截图20120728123402.jpg
(18.79 KB, 下载次数: 69)
下载附件
2012-7-28 12:35 上传
作者:
尤洋
时间:
2012-7-28 14:28
单独拿来看是可以等价的,不过在程序中就需要考虑其因素了,
因为b=b+3
涉及了一次运算
。
假如b是byte类型,则经过运算后会
b=b+3中的b会被转换为 int类型
,
而
b+=3 中则不变,b仍然是byte类型
作者:
金_鑫
时间:
2012-7-28 15:22
隐式转换也称自动转换
转换规则
从存储范围小的类型到存储范围大的类型。
具体规则为:
byte→short(char)→int→long→float→double
b=b+3中的 b会被转换为 int类型,
而b+=3 中b仍然是byte类型
作者:
乐峰
时间:
2012-7-28 15:46
如果范围大的强转成范围小的,这两句就不等价。
byte b=3;b=b+3;这样写会出现异常,需改成b=(byte)(b+3);强制将int型转换成byte才可以,而b+=3;不需要强转系统就不报错,
如果范围小的自动变成范围大的,这两句就可以等价。
作者:
焦晨光
时间:
2012-7-28 17:10
public class yunsuanfu{
public static void main (String[] args){
//定义一个byte类型的变量
byte a=5;
a=a+5;//这条语句将出错,因为5默认是int类型的,a+5就是int类型,将int类型变量赋给byte型所以出错
//因为所有的byte、short和char类型进行算术运算时将被提升为int类型
byte b=5;//再定义一个byte类型变量
b+=5; //这条语句不会出错
//通过以上程序不难发现 a=a+5 b+=5 虽然运行结果相同,但底层的运行机制还是存在一定差异的
}
}
作者:
高薇
时间:
2012-7-29 06:55
在程序中,它们是等价的;
b=b+3;如果在两数据类型不同的情况下,涉及了一次转换;
而b+=3,是直接赋值给左边的,就这点区别;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2