Java 转换分 4 大类:自动类型转换(隐式)、强制类型转换(显式)、字符串与基本类型互转、装箱拆箱(基本 ↔ 包装类)
一、自动类型转换(隐式转换,无需手动强转)
规则
取值范围小的类型 → 范围大的类型,自动完成,不会丢失精度。
转换优先级顺序:byte → short → int → long → float → doublechar → int
示例
bytea=10;intb=a;// byte自动转intlongc=b;// int自动转longfloatd=c;// long自动转floatdoublee=d;// float自动转doublecharch='A';intnum=ch;// char转int(取ASCII码)System.out.println(num);// 65注意
short和char不会自动互相转换;byte、short参与运算会自动提升为int。
二、强制类型转换(显式转换,手动写括号)
规则
大范围类型 → 小范围类型,必须强制转换,会丢失精度、溢出。
语法:(目标类型)值/变量
1. 浮点转整数(直接舍弃小数)
doublex=3.99;inty=(int)x;System.out.println(y);// 3,小数直接砍掉2. 大数转小数溢出
intnum=130;byteb=(byte)num;System.out.println(b);// -126 溢出失真3. long 转 int
longl=9999;inti=(int)l;限制
布尔boolean不能和任何类型互相转换,强转会编译报错。
三、基本类型 ↔ String 字符串转换
1. 基本类型 → String(两种方式)
1)拼接空字符串(最简单)
inta=100;Strings1=a+"";2)String.valueOf()(推荐,规范)
doubled=3.14;Strings2=String.valueOf(d);2. String → 基本类型(包装类静态parseXxx方法)
Stringstr="123";intnum=Integer.parseInt(str);StringfStr="2.5";floatf=Float.parseFloat(fStr);StringboolStr="true";booleanflag=Boolean.parseBoolean(boolStr);注意:字符串格式不对会抛出
NumberFormatException。
四、装箱 & 拆箱:基本类型 ↔ 包装类
1. 自动装箱:基本 → 包装对象
Integeri=10;// 等价 Integer i = Integer.valueOf(10);Doubled=2.5;2. 自动拆箱:包装对象 → 基本
Integerobj=20;intn=obj;// 等价 int n = obj.intValue();手动写法(底层原理)
// 手动装箱Integernum=Integer.valueOf(5);// 手动拆箱intx=num.intValue();五、运算时自动类型提升(高频坑点)
- byte / short / char 任意两者运算,先转 int
bytea=10;byteb=20;intsum=a+b;// 结果自动int- 任意整数和浮点运算,整体提升为浮点
intx=5;doubley=x+2.5;// 结果double六、转换总结速记
- 小转大:自动转,无损;
- 大转小:强制转,可能丢精度/溢出;
- 数字转字符串:
""拼接 /String.valueOf(); - 字符串转数字:包装类
parseXxx(); - 基本与包装类:自动装箱拆箱;
- boolean 不参与任何数字转换。