java原始类型转换分隐式(自动)和显式(强制)两类:小范围类型可自动转大范围类型,反之需强制转换;算术运算中类型自动提升至int及以上;包装类与原始类型通过装箱/拆箱转换,但null拆箱会抛npe。

Java 中的原始类型转换分为自动转换(隐式)和强制转换(显式),核心在于数据范围大小和类型兼容性。小范围类型可自动转为大范围类型,反之必须强制转换,否则编译报错或运行时精度丢失。
自动类型转换(隐式):安全且无需代码干预
当把取值范围较小的类型赋值给取值范围较大的类型时,Java 自动完成转换,不会丢失信息。
- 常见路径:byte → short → int → long → float → double;char → int → long → float → double
- 赋值、方法传参、算术运算中均会发生,例如 int a = 'A';(char 自动转 int,值为 65)
- 注意:short s = 10; int i = s; ✅ 合法;但 int i = 10; short s = i; ❌ 编译失败,需强制转换
强制类型转换(显式):需手动声明,有风险
用小括号包裹目标类型,写在待转换表达式前。可能截断数据或改变数值,需开发者自行保障逻辑正确。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 语法示例:double d = 99.99; int i = (int) d; → i = 99(直接截断小数,非四舍五入)
- 典型风险场景:int 转 byte 时超出 [-128, 127],如 int x = 200; byte b = (byte) x; → b = -56(高位截断,补码溢出)
- 浮点转整数一律丢弃小数部分,不进行任何舍入处理
算术运算中的类型提升规则
两个操作数参与二元运算(如 +、-、*)时,Java 按规则提升类型,结果类型为“更宽”的那个,且至少为 int。
- byte、short、char 运算时先自动提升为 int,再计算。例如:byte b1 = 10, b2 = 20; int result = b1 + b2; ✅ 合法;但 byte r = b1 + b2; ❌ 编译失败(结果是 int,不能直接赋给 byte)
- 混合类型运算:long + float → float;int + double → double
- 建议:涉及窄类型运算后需存回原类型时,显式强转并确认范围,如 byte r = (byte)(b1 + b2);
包装类与原始类型的相互转换(拆箱/装箱)
虽然不属于原始类型间转换,但常被混淆。Java 5+ 支持自动装箱/拆箱,本质是调用 valueOf() 和 xxxValue() 方法。
- 装箱:int → Integer,Integer i = 100; 等价于 Integer i = Integer.valueOf(100);
- 拆箱:Integer → int,int n = i; 等价于 int n = i.intValue();
- 注意空指针:若包装类对象为 null,拆箱会抛 NullPointerException,如 Integer x = null; int y = x;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










