在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。
展开
 我来答
我爱臭屁王
推荐于2017-09-01 · TA获得超过435个赞
知道答主
回答量:79
采纳率:0%
帮助的人:62.8万
展开全部
首先你要明确一点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】这个区间之间的,因此赋值当然不会出错啦。
BlueWanderer
2010-03-18 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:1990万
展开全部
64 + 1会直接编译为65 因为65<128 所以可以直接作为byte类型赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwwqvod
2010-03-19 · TA获得超过307个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:289万
展开全部
byte类型数据是不能直接相加的,相加会自动类型会转换int型,所以你再赋值给byte 型变量要强制类型转换成byte型如下:
c = (byte)(a+b);
注:自动类型转换:小类型转大类型 如 byte占一个字节,int占4个字节
强制类型转换:大类型转小类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
antolife
2010-03-19 · TA获得超过461个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:206万
展开全部
楼上基本正确的
我补充一点
在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范围
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式