Type | Contains | Default | Size | Range |
---|---|---|---|---|
byte | Signed Integer | 0 | 8bits | -128 to 127 |
short | Singed Integer | 0 | 16bits | -32768 to 32767 |
long | Signed Integer | 0L | 64bits | 9223372036854775808to 9223372036854775807 |
int | Sinned Integer | 0 | 32bits | -2147483648 to 2147483647 |
boolean | true or false | FALSE | 1bits | NA |
double | IEE 754 floating point | 0.0d | 64bits | 4.9E-324 to 1.7976931348623157E+308 |
char | Unicode | '\u0000' | 16bits | \u0000 to \uFFFF |
float | IEEE 754 floatting point | 0.0f | 32bits | 1.4E-45 to 3.4028235E+38 |
一、自动类型转换(隐式转换)
-
定义与条件
- 当较小容量的数据类型(如
byte
、short
)赋值给较大容量的数据类型(如int
、long
)时自动完成,无需显式操作。 - 需满足两种类型兼容且目标类型范围更大,例如数值型之间(整型→浮点型)或
char
转int
。
- 当较小容量的数据类型(如
-
典型场景
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"}
-
潜在风险
- 溢出问题:若表达式中的中间结果超出原类型范围,可能导致错误。
需提前转换操作数类型: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"}
- 溢出问题:若表达式中的中间结果超出原类型范围,可能导致错误。
二、强制类型转换(显式转换)
-
定义与语法
- 将大范围类型强制转换为小范围类型,需显式声明且可能丢失精度或溢出
double d = 3.14; int i = (int)d; // 结果为3(舍弃小数):ml-citation{ref="6,8" data="citationList"}
- 将大范围类型强制转换为小范围类型,需显式声明且可能丢失精度或溢出
-
风险与限制
- 数据截断:浮点转整型直接舍弃小数部分(非四舍五入)
- 溢出错误:超出目标类型范围时结果不可预测。
int value = 200; byte b = (byte)value; // 结果为-56(溢出):ml-citation{ref="8" data="citationList"}
-
特殊场景
byte
、short
、char
参与运算时自动提升为int
,需强制转换回原类型:byte b1 = 1, b2 = 2; byte b3 = (byte)(b1 + b2); // 必须强制转换:ml-citation{ref="4,8" data="citationList"}
三、类型提升(运算时的自动升级)
-
混合运算规则
- 表达式中不同类型操作数混合时,自动提升为容量最大的类型。
int a = 10; double b = 5.5; double result = a + b; // int→double,结果为15.5:ml-citation{ref="5,6" data="citationList"}
- 表达式中不同类型操作数混合时,自动提升为容量最大的类型。
-
提升优先级
- 数值型优先级:
byte → short → int → long → float → double
。 byte
、short
、char
单独运算时统一提升为int
:short s = 10; char c = 'A'; int sum = s + c; // short和char均提升为int:ml-citation{ref="4,8" data="citationList"}
- 数值型优先级:
四、其他注意事项
-
不兼容类型
boolean
类型不参与任何类型转换。- 引用类型转换需通过继承或接口实现关系完成(不在此讨论范围)。
-
精度敏感场景
- 金融计算避免使用浮点型(如
float
、double
),推荐BigDecimal
类
- 金融计算避免使用浮点型(如
转换类型 | 方向 | 语法 | 风险 | 示例 |
自动转换 | 小类型变大类型 | 隐式 | 中间结果可能溢出 | long 1 =100 |
强制转换 | 大类型变小类型 | (目标类型) 变量 | 数据截断 溢出 | int i =(int)3.14 |
类型提升 | 运算中自动升级 | 隐式 | 需注意最终类型精度 | double d =10+5.5 |