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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倪杭乘 中级黑马   /  2012-5-14 19:05  /  3032 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b = 12;byte c = 23;
b = b+c;
这个编译报错,好像是说b和c被默认转成int操作了?不是很确定

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

点评

byte short char的值参与运算将被自动提升为int  发表于 2012-5-14 20:10

8 个回复

倒序浏览
b = (byte)(b+c); //可以把b+c类型转换成byte
回复 使用道具 举报
b+=c   这个可以自动转换类型的  而b=b+c不能转换类型  要用b=(byte) b+c
回复 使用道具 举报
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转义字符部分 大小碗理论很经典,应该就能明白了哦

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

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

................................
回复 使用道具 举报
1、java中整数运算默认都是int类型的
2、b += c 这个, +=是一个运算符, 此过程是直接将b与c的和赋值给b,没有自动转换与提升过程。
学习了
回复 使用道具 举报
谢述华 发表于 2012-5-14 21:58
1、java中整数运算默认都是int类型的
2、b += c 这个, +=是一个运算符, 此过程是直接将b与c的和赋值给b, ...

那在什么情况下用b=b+c;什么情况下用b+=c;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马