黑马程序员技术交流社区

标题: 问个基础的问题,byte类型数据相加 [打印本页]

作者: 倪杭乘    时间: 2012-5-14 19:05
标题: 问个基础的问题,byte类型数据相加
byte b = 12;byte c = 23;
b = b+c;
这个编译报错,好像是说b和c被默认转成int操作了?不是很确定

b+=c 为什么可以,可以讲的具体点吗

作者: 小小企鹅    时间: 2012-5-14 19:10
b = (byte)(b+c); //可以把b+c类型转换成byte

作者: 蒋映辉    时间: 2012-5-14 19:12
b+=c   这个可以自动转换类型的  而b=b+c不能转换类型  要用b=(byte) b+c
作者: 李斌    时间: 2012-5-14 19:36
byte b = 12;byte c = 23;
1.b = b+c;
2.b+=c;
1与2的区别:
1等式的右边在运算时 发生了自动类型提升 等式右边被提升为int 数据类型 而等式左边依然是byte数据类型 所以编译报错 容易丢失精度。实际上这个等式进行了2次运算,编译无法通过。需要强制转换为byte类型 即b=byte(b+c)
2等式 只进行了一次赋值运算,它存在自动转换的动作。即将b+c的值同时赋给b,所以就能通过编译咯
你去看看毕老师02-08类型转换和02-10转义字符部分 大小碗理论很经典,应该就能明白了哦


作者: 杨康    时间: 2012-5-14 19:51
因为byte类的 b 和 c 求和后 又重新赋给了b, 这时候b与c就被自动转换成默认类型int。是一个先求和再赋值的过程,有类型的自动提升过程。
而 b += c 这个, +=是一个运算符, 此过程是直接将b与c的和赋值给b,没有自动转换与提升过程,应该b是byte类型的吧。
不知道理解的对否。
作者: 冯建鹏    时间: 2012-5-14 19:52
java中整数运算默认都是int类型的,
byte b = 12;byte c = 23;
b = b+c;//这句话返回的结果是int类型的数据,赋值给byte当然会报错,
如果想赋值给b 需要加强转b=(int)(b+c);
这里面要多给你提到下 向上转型 和向下转型  如果低位向高位转  java虚拟机会自动给我们完成,如果高位向低位转,就需要强转。

作者: 马文浩    时间: 2012-5-14 21:51
神........

24分的高手会不知道这个问题的答案?

................................
作者: xieshuhua    时间: 2012-5-14 21:58
1、java中整数运算默认都是int类型的
2、b += c 这个, +=是一个运算符, 此过程是直接将b与c的和赋值给b,没有自动转换与提升过程。
学习了
作者: 忆痕无殇    时间: 2012-5-15 09:32
谢述华 发表于 2012-5-14 21:58
1、java中整数运算默认都是int类型的
2、b += c 这个, +=是一个运算符, 此过程是直接将b与c的和赋值给b, ...

那在什么情况下用b=b+c;什么情况下用b+=c;




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