黑马程序员技术交流社区
标题:
问个基础的问题,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