Java中的基本数据类型转换(自动、强制、提升)

Type ContainsDefaultSizeRange
byteSigned Integer     0   8bits   -128 to 127
shortSinged Integer     0  16bits -32768 to 32767
longSigned Integer     0L   64bits

9223372036854775808to

9223372036854775807

intSinned Integer     0   32bits-2147483648 to 2147483647
booleantrue or false  FALSE   1bits NA
doubleIEE  754 floating point  0.0d   64bits4.9E-324 to 1.7976931348623157E+308
charUnicode '\u0000'  16bits\u0000 to \uFFFF
floatIEEE 754 floatting point  0.0f   32bits1.4E-45 to 3.4028235E+38

一、自动类型转换(隐式转换)
  1. 定义与条件

    • 当较小容量的数据类型(如 byteshort)赋值给较大容量的数据类型(如 intlong)时自动完成,无需显式操作‌。
    • 需满足两种类型兼容且目标类型范围更大,例如数值型之间(整型→浮点型)或 char 转 int‌。
  2. 典型场景

    int a = 100; long b = a; 
    // int→long,自动转换‌:ml-citation{ref="1" data="citationList"} float f = 3.14F; double d = f; 
    // float→double,自动转换‌:ml-citation{ref="3" data="citationList"}

  3. 潜在风险

    • 溢出问题‌:若表达式中的中间结果超出原类型范围,可能导致错误。
       
      int x = 1000000000; int y = 3; long result = x * y; 
      // 结果为负数(溢出)‌:ml-citation{ref="1" data="citationList"}
      需提前转换操作数类型:
       
      long result = (long)x * y; 
      // 正确‌:ml-citation{ref="1" data="citationList"}

二、强制类型转换(显式转换)
  1. 定义与语法

    • 将大范围类型强制转换为小范围类型,需显式声明且可能丢失精度或溢出‌
      double d = 3.14; int i = (int)d;
       // 结果为3(舍弃小数)‌:ml-citation{ref="6,8" data="citationList"}

  2. 风险与限制

    • 数据截断:浮点转整型直接舍弃小数部分(非四舍五入)‌
    • 溢出错误:超出目标类型范围时结果不可预测。
      int value = 200; byte b = (byte)value; 
      // 结果为-56(溢出)‌:ml-citation{ref="8" data="citationList"}

  3. 特殊场景

    • byteshortchar 参与运算时自动提升为 int,需强制转换回原类型:
      byte b1 = 1, b2 = 2; byte b3 = (byte)(b1 + b2); 
      // 必须强制转换‌:ml-citation{ref="4,8" data="citationList"}

三、类型提升(运算时的自动升级)
  1. 混合运算规则

    • 表达式中不同类型操作数混合时,自动提升为容量最大的类型。
      int a = 10; double b = 5.5; double result = a + b; 
      // int→double,结果为15.5‌:ml-citation{ref="5,6" data="citationList"}

  2. 提升优先级

    • 数值型优先级:byte → short → int → long → float → double‌。
    • byteshortchar 单独运算时统一提升为 int
       
      short s = 10; char c = 'A'; int sum = s + c; 
      // short和char均提升为int‌:ml-citation{ref="4,8" data="citationList"}

四、其他注意事项
  1. 不兼容类型

    • boolean 类型不参与任何类型转换‌。
    • 引用类型转换需通过继承或接口实现关系完成(不在此讨论范围)。
  2. 精度敏感场景

    • 金融计算避免使用浮点型(如 floatdouble),推荐 BigDecimal 类‌

  转换类型    方向     语法   风险   示例
 自动转换小类型变大类型  隐式 中间结果可能溢出long 1 =100
 强制转换大类型变小类型

 (目标类型)

 变量

数据截断

溢出

int i =(int)3.14
 类型提升运算中自动升级 隐式需注意最终类型精度double d =10+5.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值