面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)

本文深入探讨了Java中不同类型之间的转换规则,特别是对于byte和short类型的加法运算导致的数据类型自动提升现象进行了详细解释,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package Exercise;


public class Text_10 {
// 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明
public static void main(String[] args) {
byte b1 = 3;
byte b2 = 4;
// 无法编译 byte b4 = b1 + b2;
// 答案:存在隐性转换,因此会自动提升到int类型,但原数据类型是byte,所以需要强制转换
int b41 = b1 + b2;
byte b42 = (byte) (b1 + b2);
System.out.println("b41=" + b41 + ";b42=" + b42);


short s = 1;
// s=s+1; 编译不通过的,提示损失精度 。
s = (short) (s + 1);// 答案:存在隐性转换,因此会自动提升到int类型,但原数据类型是short,所以需要强制转换


short s1 = 1;
s1 += 1; /*
* 能编译通过。隐式类型转换可以从小到大自动转
* 即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换 , 而s+=1的意思与s
* = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,
* 由于1为int类型,所以s+1的返回值是int,编译器自动进行了隐式类型转换,
* 所以将一个int类型赋给short就会出错,而s+=1不同由于是+=操作符, 在解析时候s+=1就等价于s =
* (short)(s+1), 翻番来讲就是 s+=1 <=> s = (s的类型)(s+1)。
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值