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

byte b1 = 3, b2 = 4, b;
b1 = b1 + b2; //这句会报错,因为在java里面b1+b2的结果是int类型

可是为什么 b = 3 + 4;又是对的呢?明显3+4后是int类型,把int类型赋值给byte类型,应该是错的啊。为什么编译器却通过了?

一下只是猜测,没去自习查找相关资料,仅供参考。

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,无形中效率变高了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-23
就好像你的b1=3为什么不报错呢?3也是个int数啊.所以b=3+4并没有问题,你把数字去相加,它会把结果转换成byte存储.但是b1=b1+b2就不行,因为这个进行运算会强制转换为int类型的结果.
解决方法是把b1=b1+b2换成b1+=b2.使用+=就会保证类型不改变.
第2个回答  2012-07-21
你太细心了