Java细节01——类型转换问题

我们来看下面的两段代码:

public class Demo {
    public static void main(String[] args) {

        byte b;
        b = 3 + 7;

        System.out.println(b);
    }
}

毫无疑问输出结果是10
而当我们稍微修改一下:

public class Demo {
    public static void main(String[] args) {

        byte b, b1 = 3, b2 = 7;
        b = b1 + b2;

        System.out.println(b);
    }
}

结果就报错了

Error:(7, 16) java: 不兼容的类型:int转换到byte可能会有损失

明明b、b1、b2都是byte型,为什么会报错?
要解释这个问题,我们要从b = 3 + 7说起,我们知道整数在Java中默认是int型,那么3 + 7的结果自然是int型,而b是byte型。那么问题来了,int型为什么能赋给byte型?这里我们要了解Java的编译机制,当Java遇到大内存类型赋给小内存类型时,它会判断大内存类型中所存的值是否在小内存类型表示的范围内,如果在,就会自动强制转换为小内存类型。所以b = 3 + 7是合法的。
b = b1 + b2为什么会报错呢?那是因为b1、b2是变量,变量的值是可以变化的,所以b1 + b2的值完全有可能超过byte型的取值范围。而编译器不知道b1、b2的值是多少,所以它无法检测是否超过byte的取值范围,所以就会报错说从int转为byte可能会有损失。
总结:赋值的时候当所赋超过该类型的取值范围就会报错(默认整数类型int除外,它会自动舍弃高位)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值