Java 常用数据类型转换总结

在 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 → doublelong → 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_VALUE
     
    Integer.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

总结表

转换方向方法示例
基本类型 → StringString.valueOf(xxx)String.valueOf(123) → "123"
String → intInteger.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;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值