在 Java 开发中,数据类型转换是非常基础且频繁的操作。下面整理了最常用的类型转换方法,包括基本类型之间、基本类型与字符串之间的转换,特别补充了字符与数字转换中常见的 -'0' 用法。
一、基本数据类型之间的转换
基本类型(byte/short/int/long/float/double/char/boolean)之间的转换分为自动类型转换(隐式)和强制类型转换(显式)。
1. 自动类型转换(小范围 → 大范围)
无需手动处理,编译器自动完成:
byte b = 10;
short s = b; // byte → short
int i = s; // short → int
long l = i; // int → long
float f = l; // long → float
double d = f; // float → double
转换规则:
- 整数类型:
byte → short → int → long - 浮点类型:
float → double - 整数 → 浮点:
int → float → double、long → float → double(可能损失精度)
2. 强制类型转换(大范围 → 小范围)
需要手动添加转换符 (目标类型),可能丢失精度:
double d = 3.14;
float f = (float) d; // double → float
long l = (long) f; // float → long
int i = (int) l; // long → int
short s = (short) i; // int → short
byte b = (byte) s; // short → byte
注意:
- 浮点转整数会截断小数部分(不是四舍五入)
- 超出目标类型范围时会溢出(如
int i = (int) 2147483648L;会溢出 可以用Integer.MAX_VALUEInteger.MIN_VALUE / 10
表示边界)
二、基本类型与字符串(String)的转换
1. 基本类型 → String(5 种方法)
// 方法1:拼接空字符串(最简单)
int num = 123;
String str1 = num + "";
// 方法2:String.valueOf()(推荐)
String str2 = String.valueOf(num);
// 方法3:包装类的toString()
String str3 = Integer.toString(num);
// 方法4:String.format()(适合格式化)
String str4 = String.format("%d", num);
// 方法5:包装类对象的toString()
String str5 = new Integer(num).toString();
适用所有基本类型:
String boolStr = String.valueOf(true); // "true"
String charStr = String.valueOf('A'); // "A"
String floatStr = String.valueOf(3.14f); // "3.14"
2. String → 基本类型(通过包装类的 parseXxx 方法)
// String → int
String str = "123";
int num = Integer.parseInt(str);
// String → long
long l = Long.parseLong(str);
// String → float/double
float f = Float.parseFloat("3.14");
double d = Double.parseDouble("3.14");
// String → boolean(仅"true"会转成true,其他都是false)
boolean b = Boolean.parseBoolean("true");
// String → char(取字符串第一个字符)
char c = "hello".charAt(0); // 'h'
注意:字符串格式错误会抛 NumberFormatException
三、char 与数字的特殊转换:char - '0'
1. 什么是 char - '0'?
这是将字符型数字(如 '0'~'9')转换为对应的整数(0~9)的快捷方式,利用了 ASCII 码的特性:
- 字符
'0'的 ASCII 码是 48 - 字符
'1'的 ASCII 码是 49 - ...
- 字符
'9'的 ASCII 码是 57
因此:
char c = '5';
int num = c - '0'; // 53 - 48 = 5('5'的ASCII码是53)
2. 应用场景:处理字符串中的数字
当需要从字符串中提取单个数字字符并转为整数时非常方便:
String str = "12345";
int sum = 0;
for (int i = 0; i < str.length(); i++) {
// 逐个提取字符,转为数字后累加
char c = str.charAt(i);
int num = c - '0'; // 关键转换:'1'→1,'2'→2...
sum += num;
}
System.out.println(sum); // 1+2+3+4+5=15
3. 反向转换:整数 → 字符型数字
如果需要将 0~9 的整数转为对应的字符('0'~'9'),可以用 (char) (num + '0'):
int num = 3;
char c = (char) (num + '0'); // 3 + 48 = 51 → 对应字符'3'
四、char 与其他类型的转换
1. char ↔ int(字符与 ASCII 码互转)
// char → int(获取ASCII码)
char c = 'A';
int ascii = (int) c; // 65('A'的ASCII码)
// int → char(根据ASCII码获取字符)
int code = 97;
char ch = (char) code; // 'a'(97是'a'的ASCII码)
2. char ↔ String
// char → String
char c = 'A';
String str1 = String.valueOf(c); // "A"
String str2 = Character.toString(c); // "A"
// String → char(单个字符的字符串)
String str = "B";
char ch = str.charAt(0); // 'B'
五、包装类与基本类型的转换(拆箱与装箱)
1. 装箱(基本类型 → 包装类)
int i = 10;
Integer iObj = Integer.valueOf(i); // 推荐(有缓存机制)
Integer iObj2 = new Integer(i); // 不推荐(效率低)
2. 拆箱(包装类 → 基本类型)
Integer iObj = 100;
int i = iObj.intValue();
自动拆箱 / 装箱(Java 5 + 支持):
Integer iObj = 100; // 自动装箱(int → Integer)
int i = iObj; // 自动拆箱(Integer → int)
六、常见转换场景示例
示例 1:字符串数组转整数数组
String[] strArr = {"1", "2", "3"};
int[] intArr = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
intArr[i] = Integer.parseInt(strArr[i]);
}
示例 2:整数转二进制 / 十六进制字符串
int num = 255;
String binary = Integer.toBinaryString(num); // "11111111"
String hex = Integer.toHexString(num).toUpperCase(); // "FF"
示例 3:用 char - '0' 处理数字字符串
// 计算字符串中所有数字的乘积
String str = "234";
int product = 1;
for (int i = 0; i < str.length(); i++) {
int digit = str.charAt(i) - '0'; // '2'→2,'3'→3,'4'→4
product *= digit;
}
System.out.println(product); // 2*3*4=24
总结表
| 转换方向 | 方法 | 示例 |
|---|---|---|
| 基本类型 → String | String.valueOf(xxx) | String.valueOf(123) → "123" |
| String → int | Integer.parseInt(str) | Integer.parseInt("123") → 123 |
| 字符数字 → 整数 | char - '0' | '5' - '0' → 5 |
| 整数 → 字符数字 | (char)(num + '0') | 5 + '0' → '5' |
| int → long | 自动转换 | long l = 123; |
| long → int | (int) 强制转换 | int i = (int) 123L; |
| char ↔ int(ASCII) | (int) 或 (char) 强制转换 | (int)'A' → 65; (char)65 → 'A' |
| 基本类型 ↔ 包装类 | 自动拆箱 / 装箱 | Integer i = 10; int j = i; |
1656

被折叠的 条评论
为什么被折叠?



