在Java中,byte类型数据在运算之前要转换成int类型数据。
能不能帮我解决一个问题?在Java中,byte类型数据在运算之前要转换成int类型数据。比如:bytea=1;byteb=2;bytec;c=a+b;//这样是计算不出c...
能不能帮我解决一个问题?
在Java中,byte类型数据在运算之前要转换成int类型数据。
比如:
byte a=1;
byte b=2;
byte c;
c=a+b; //这样是计算不出c,是错误的
c=a+1; //这样也是不能计算c的
c=64+1; //为什么这样就能计算c,在Java中这是什么原理啊?
我就是不知道,64+1 Java是怎么编译的,为什么没有变成int型?
谢谢大家,我已经有了更满意的答案。
字面量是对信息、数据的一个表述。或者说是我们直接用来表述的数值或字符。
比如:byte a=64; //其中64就是字面量。
1,2,64等等是整数字面量,它们默认是int型。而1.2,3.4等等是浮点字面量,默认是double型。
不是默认类型字面量,要在其后加上类型标识。
比如:46+7.8f
对于整数字面量,Java编译系统会自动匹配字面量的类型。
当一个int型字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时,就不会产生错误。然而,其他类型的字面量(如:short,long,char,double等等)是没有这个功能的。
所以,byte c; c=64+1; //65在byte的范围之内,可以赋值给c。 展开
在Java中,byte类型数据在运算之前要转换成int类型数据。
比如:
byte a=1;
byte b=2;
byte c;
c=a+b; //这样是计算不出c,是错误的
c=a+1; //这样也是不能计算c的
c=64+1; //为什么这样就能计算c,在Java中这是什么原理啊?
我就是不知道,64+1 Java是怎么编译的,为什么没有变成int型?
谢谢大家,我已经有了更满意的答案。
字面量是对信息、数据的一个表述。或者说是我们直接用来表述的数值或字符。
比如:byte a=64; //其中64就是字面量。
1,2,64等等是整数字面量,它们默认是int型。而1.2,3.4等等是浮点字面量,默认是double型。
不是默认类型字面量,要在其后加上类型标识。
比如:46+7.8f
对于整数字面量,Java编译系统会自动匹配字面量的类型。
当一个int型字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时,就不会产生错误。然而,其他类型的字面量(如:short,long,char,double等等)是没有这个功能的。
所以,byte c; c=64+1; //65在byte的范围之内,可以赋值给c。 展开
4个回答
展开全部
首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位),它会将这个数转化为一个字符然后存放起来,因此你的前两行代码是没有问题的。第四行就开始有问题了:a,b都是byte型,他们相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的c显然是要强制转换的,因此Java会报编译错误,第五行是同样的道理。第六行有点特殊了,请注意,64+1编译器会自动当做65来处理,这句和c=65效果是一样的,由于65是在【-128,127】这个区间之间的,因此赋值当然不会出错啦。
展开全部
64 + 1会直接编译为65 因为65<128 所以可以直接作为byte类型赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
byte类型数据是不能直接相加的,相加会自动类型会转换int型,所以你再赋值给byte 型变量要强制类型转换成byte型如下:
c = (byte)(a+b);
注:自动类型转换:小类型转大类型 如 byte占一个字节,int占4个字节
强制类型转换:大类型转小类型
c = (byte)(a+b);
注:自动类型转换:小类型转大类型 如 byte占一个字节,int占4个字节
强制类型转换:大类型转小类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上基本正确的
我补充一点
在java中整数默认都上int型,意思就是你写一个1那么1就默认为int型
浮点数默认为double型,同上
c=a+b; //byte+byte=int
c=a+1; //byte+int(1为int型上面解释了)=int
c=64+1; //其实int+int=(?)就不好说了,这要考虑范围,java编译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了
但下面这样就不行了
c=1+127//出错,超出byte范围
我补充一点
在java中整数默认都上int型,意思就是你写一个1那么1就默认为int型
浮点数默认为double型,同上
c=a+b; //byte+byte=int
c=a+1; //byte+int(1为int型上面解释了)=int
c=64+1; //其实int+int=(?)就不好说了,这要考虑范围,java编译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了
但下面这样就不行了
c=1+127//出错,超出byte范围
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询