final考点 -- 数据类型转换

当使用 + - * / % 等数学运算时,遵循以下原则:
  1. 只要两个操作数中有一个double类型的,另一个将会被转换成double类型,并且结果也是double类型。
  2. 只要两个操作数中有一个float类型的,另一个将会被转换为float类型,并且结果也是float类型。
  3. 只要两个操作数中有一个long类型的,另一个将会被转换成long类型,并且结果也是long类型。
  4. 否则(操作数为byteshortintchar),两个操作数都会被转换成int类型,并且结果也是int类型。
  5. 但是final修饰的域类型不会发生上述变化(final修饰的常量值不能变,连类型也不能变)。
原程序:请选出下列程序出错的语句:
public class ShuJuLeiXingZhuanHuan {
    byte b1=1, b2=2, b3, b6, b8;
    final byte b4=4, b5=5, b7=7;
    public void fun() {
        // 1.b3 = (b1+b2);
        // 2.b6 = (b4+b5);
        // 3.b7 = (b1+b3);
        // 4.b8 = (b1+b4);
    }
    public static void main(String[] args) {
        new ShuJuLeiXingZhuanHuan().fun();
    }
}

在这里插入图片描述
b3 = (b1+b2);:等式右边的b1和b2==都是byte类型,进行算术运算时都会转换成int类型,结果也是int类型,而等式左边的b3是byte类型,从int转换到byte类型会有精度丢失,需要强转,即b3 = (byte)(b1+b2);
b6 = (b4+b5);:等式右边的b4和b5都是final修饰的byte类型,在进行算术运算时不会发生类型转换,所以结果是byte类型,而等式右边的b6也是byte类型,没有问题。
b7 = (b1+b3);:等式的左边的b7是final修饰的byte类型,值是不能变的,把b1和b3的和赋值给b7本来就是错的,更何况数据类型了。
b8 = (b1+b4);:等式右边的b1是byte类型,运算时转换为int型,b4是final修饰的byte类型运算时不会发生类型上的转换,int+byte还是int,而等式左边的b8是个byte型,从int转换到byte类型会有精度丢失,需要强转,即b8 = (byte)(b1+b4);

修改之后的程序:
public class ShuJuLeiXingZhuanHuan {
    byte b1=1, b2=2, b3, b6, b8;
    final byte b4=4, b5=5, b7=7;
    public void fun() {
        b3 = (byte)(b1+b2);
        b6 = (b4+b5);
        //错误的b7 = (b1+b3);
        b8 = (byte)(b1+b4);
    }
    public static void main(String[] args) {
        new ShuJuLeiXingZhuanHuan().fun();
    }
}

在这里插入图片描述
经过修改之后的程序就是对的了,因为这里没有任何输出的语句,所以不会打印出任何东西,但是证明程序运行起来是没有什么问题的~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值