自动类型提升和强制类型转换

25 篇文章 0 订阅
本文详细介绍了Java中的自动类型提升和强制类型转换。从byte到double,阐述了不同类型的自动转换顺序,并指出short无法直接与short或byte进行自动转换。同时,通过示例展示了表达式中不同类型数值的提升规则。此外,还强调了强制类型转换可能带来的问题,如bytea=(short)15;实际上隐含了两次转换。最后,提醒开发者注意类型转换可能导致的数据丢失和精度问题。
摘要由CSDN通过智能技术生成

自动类型提升和强制类型转换

自动类型提升

  1. 小到大的自动类型转换

    • 两条路线

      • byte -> short -> int -> long -> float - > double

      • char -> int -> long -> float -> double

      • byte b = 20;  // 这里 编译器会自动强制类型转换  (byte)20
        short s = b;  // b 中的 20 是 byte 类型,此时会自动转换为 short
        int x = s;	  // 小到大,同上
        
    • 一点注意

      • short 不可以与 short 和 byte 自动类型转换
  2. 表达式的自动类型提升

    byteshortcharintlongfloatdouble
    1字节2字节2字节4字节8字节4字节8字节

    但是存放数字的范围 int < long < float < double

    • 如果表达式没有出现 long, float, double时,表达式的类型是 int

      • 'c' - 'b'   // 这个表达式的值为 1 int类型
        
    • 当出现 long < float < double 时 ,哪个出现是哪种类型,都出现就是最大的那个

强制类型转换

一个大坑

  • 你以为它不对,其实它是对的

    • byte a = (short) 15;
      
    • 编译器会再次对其进行强制类型提升

      byte a = (byte)((short) 15); // 庐山真面目
      
    • 但是这就是不对的

      int a = (long)17;
      
  • 编译器会自动加上强制类型转换的

    • char s = 16;
      byte a = 1;
      short b = 2;
      // 以及坑
      short c = (byte) 2; 
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值