Java基本数据类型转换需把握四点:一是自动转换仅限小范围到大范围数值类型,如byte→int,但byte、short、char间不互转;二是强制转换需显式括号,有精度丢失或溢出风险,且boolean不可与数值互转;三是String与基本类型转换须用valueOf()或parseXxx()方法,不可直接强转;四是装箱拆箱涉及Integer缓存机制(-128~127),==比较易出错,推荐equals()或拆箱后比较。

Java 基本数据类型转换是面试高频考点,回答时要抓住转换方向、是否自动、有无风险、特殊限制这四个关键点。不需要背代码,但得说清逻辑和边界。
一、自动类型转换(隐式)怎么判断?
只发生在小范围 → 大范围且同为数值类型时,系统自动完成,安全无损。
- 转换顺序固定:byte/short/char → int → long → float → double
- 注意:byte、short、char 三者平级,不能互相自动转(如 short s = 10; char c = s; 编译报错)
- char 转 int 实际转的是 ASCII 码值,'a' → 97
- 运算中会自动提升:两个 byte 相加,结果是 int,不能直接赋给 byte 变量(需强转)
二、强制类型转换(显式)要注意什么?
必须手动写 (type),用于大范围 → 小范围,但有精度丢失或溢出风险。
- 语法必须括号包裹整个表达式:byte b = (byte)(a + c);,不是 (byte)a + c
- float/double 转整型会直接截断小数部分,不四舍五入
- 超出目标类型范围时发生溢出:如 (byte)200 → -56(200 的二进制截取低 8 位后按补码解释)
- boolean 和任何数值类型之间禁止强制转换,编译不通过
三、字符串和其他类型互转的常见写法
String 不是基本类型,它和基本类型之间没有自动或强制转换关系,必须借助工具方法。
立即学习“Java免费学习笔记(深入)”;
- 基本类型 → String:String.valueOf(x) 或 "" + x(后者本质调用 valueOf)
- String → 基本类型:Integer.parseInt(s)、Double.parseDouble(s) 等,注意空值或格式错误会抛 NumberFormatException
- Integer i = "123"; 是错的;int j = (int)"123"; 也错——String 不能用 (int) 强转
四、装箱拆箱与 == 比较的坑
这是延伸常考点,容易和类型转换混淆,需单独强调:
- 自动装箱:Integer a = 100; → 实际调用 Integer.valueOf(100)
- Integer 缓存范围是 -128 到 127,这个区间内用 == 比较可能为 true;超范围则 new 出新对象,== 为 false
- 建议统一用 equals() 比较包装类值,或先拆箱再用 ==(如 a.intValue() == b.intValue())
- 拆箱遇 null 会触发 NullPointerException,比如 Integer i = null; int j = i;


















