黑马程序员技术交流社区
标题:
有个小问题值得大家思考!来看下吧
[打印本页]
作者:
徐鑫
时间:
2012-4-26 22:23
标题:
有个小问题值得大家思考!来看下吧
public class sdfsdf {
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c;
c = a+b;//这里编译错误,为什么
}
}
作者:
chenwei
时间:
2012-4-26 22:29
byte类型参与运算会自动提升为int型 ,在把int型赋给byte就会报错了
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
作者:
小鹿叙鹿
时间:
2012-4-26 22:33
是这样的:
因为byte,short,char类型在进行运算的时候会首先自动提升为int型,然后在进行运算。
所以编译会报错,可以这样改
c=byte(a+b)强制转换为byte型
但是对于
byte c=3+4;
编译器就不会报错,因为3,与4都是常量,在进行运算的时候,Java虚拟机会首先对两个数相加,看长度是否超过byte的长度,
如果没有超出,就不会报错。否则,报错。
作者:
张成龙
时间:
2012-4-26 23:09
byte型数据在运算时提升为int型,int型赋给byte就会报错啦
作者:
马浩
时间:
2012-4-26 23:44
public class sdfsdf {
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c;
c = a+b;//
做加法运算时,a和b会被提升为int型,可以改成c=(byte)(a+b);就不报错了
作者:
HeiMaYSL
时间:
2012-4-27 17:02
public class sdfsdf {
public static void main(String[] args) {
byte a = 1;
byte b = 2;
byte c;
c = a+b; //在这里在编译时,java虚拟机会提示你:可能损失精度,找到:int,需要:byte。
这种编译错误是因为:java虚拟机在编译byte,short,char类型进行运算时,会先把它们自动提升为 int 类型,然后在进行其它的运算。
解决这类问题就是加上强制类型转换一下就哦了。
可以把c=a+b 改成 c=(byte)(a+b); 这样就不会损失精度了。
这些东西毕老师在讲java基础时,都说过的,建议你再去看看毕老师的教程。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2