[java] byte b; b = 3 + 4; 为什么这样会是对的呢?

byteb1=3,b2=4,b;b1=b1+b2;//这句会报错,因为在java里面b1+b2的结果是int类型可是为什么b=3+4;又是对的呢?明显3+4后是int类型... byte b1 = 3, b2 = 4, b;
b1 = b1 + b2; //这句会报错,因为在java里面b1+b2的结果是int类型

可是为什么 b = 3 + 4;又是对的呢?明显3+4后是int类型,把int类型赋值给byte类型,应该是错的啊。为什么编译器却通过了?
展开
 我来答
逆十字血
2012-07-21 · TA获得超过141个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:168万
展开全部
一下只是猜测,没去自习查找相关资料,仅供参考。

byte + byte 会默认类型转换成: int + int 。然后得到的结果当然是int类型了。 应为java默认运行最大效率的数字类型是int ,其他类型的运算好像都没这个快,所以默认被转换成了int。

3 + 4 先会被计算成 7 ,再转换成对应的 byte类型。此处也是效率问题,3、4先转换成byte的效率低于直接相加再修改成对应类型。

顺便说下java效率小知识:
String a = "a" + "b";
并不会创建出3个 String ,此处的"a" + "b" 并不是先转换成String 然后相加。而是为了效率,先“字符串”相加,然后被格式化成String 类型。
所以这里java 只创建了等号左右两个String,无形中效率变高了。
般若兮若
推荐于2018-03-23 · TA获得超过2705个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:924万
展开全部
就好像你的b1=3为什么不报错呢?3也是个int数啊.所以b=3+4并没有问题,你把数字去相加,它会把结果转换成byte存储.但是b1=b1+b2就不行,因为这个进行运算会强制转换为int类型的结果.
解决方法是把b1=b1+b2换成b1+=b2.使用+=就会保证类型不改变.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whw19912007
2012-07-21 · TA获得超过139个赞
知道答主
回答量:178
采纳率:0%
帮助的人:109万
展开全部
你太细心了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式