String 和基本数据类型的相互转换

在 Java 中,String 与基本数据类型之间的相互转换是非常常见的操作。

目录

基本数据类型——>String

1. 使用 String.valueOf() 方法(推荐)

2. 使用基本数据类型包装类的 toString() 方法

3. 使用字符串拼接(最简单但不推荐)

实践建议

String ——> 基本数据类型

1. 使用包装类的 parseXxx() 方法

2. 使用包装类的 valueOf() 方法(返回包装类对象,可自动拆箱)

实践建议

注意事项


基本数据类型——>String

1. 使用 String.valueOf() 方法(推荐)

int i = 123;
String s1 = String.valueOf(i);  // "123"

double d = 3.14;
String s2 = String.valueOf(d);  // "3.14"

boolean b = true;
String s3 = String.valueOf(b);  // "true"

特点:

  • 适用类型:支持所有类型(基本类型 + 对象)
  • null 安全:对象为 null 时返回 "null" 字符串
  • 底层实现:

        基本类型 → 调用对应包装类的静态方法(如 Integer.toString(i))

        对象类型 → 调用 obj.toString()

  • 性能:高效(基本类型无装箱,对象类型直接调用 toString())

2. 使用基本数据类型包装类的 toString() 方法

int i = 123;
String s1 = Integer.toString(i);  // "123"

double d = 3.14;
String s2 = Double.toString(d);  // "3.14"

特点:

  • 适用类型:基本类型(需指定对应包装类)
  • null 处理:基本类型不可能为 null;若用于包装类对象则需判空
  • 底层实现:直接操作基本类型,无装箱(如 Integer.toString(int))
  • 性能:与 String.valueOf() 相当(本质相同调用)

3. 使用字符串拼接(最简单但不推荐)

int i = 123;
String s1 = "" + i;  // "123"

特点:

  • 适用类型:支持所有类型(对象类型处理时隐式调用 String.valueOf())
  • null 安全:对象为 null 时返回 "null"
  • 底层实现:编译为 new StringBuilder().append(value).toString()
  • 性能:较差(隐含 StringBuilder 开销,每一次都会拼接创建一个StringBuilder 对象

实践建议

1.优先选择 String.valueOf()

        适用于大多数场景,尤其是需要处理多种类型或可能为 null 时。

2.明确基本类型时用包装类 toString()

        当明确处理 int/double 等基本类型时,更推荐 Integer.toString(i),语义更清晰。

3.避免使用字符串拼接

        仅在快速调试或简单代码中使用,禁止在循环或性能敏感代码中使用。

4.特殊场景:

//——————————1——————————————
// 需要自定义null显示内容时
String s = (obj != null) ? obj.toString() : "NULL_VALUE";

//而用String.valueOf()略显冗余,因为String.valueOf(obj) 内部已经做了 null 检查
//String s = (obj != null) ? String.valueOf(obj) : "NULL_VALUE";

//————进一步简化
//如果你使用 Java 9 及以上版本,可以用 Objects.toString() 更简洁地实现:
//String s = Objects.toString(obj, "NULL_VALUE");
//第一个参数是要转换的对象,第二个参数是当对象为 null 时的默认值




//—————————2————————————————

// 日志输出可以直接用拼接(可读性优先)
log.debug("Value: " + obj);

String ——> 基本数据类型

1. 使用包装类的 parseXxx() 方法

String s1 = "123";
int i = Integer.parseInt(s1);  // 123

String s2 = "3.14";
double d = Double.parseDouble(s2);  // 3.14

String s3 = "true";
boolean b = Boolean.parseBoolean(s3);  // true

底层:

例,Integer.parseInt() 源码片段:

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s, 10);  // 直接返回 int
}

2. 使用包装类的 valueOf() 方法(返回包装类对象,可自动拆箱)

String s1 = "123";
int i = Integer.valueOf(s1);  // 123 (自动拆箱)

String s2 = "3.14";
double d = Double.valueOf(s2);  // 3.14 (自动拆箱)

底层

例,Integer.valueOf() 源码片段:

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s));

 // valueOf() 内部会先调用 parseXxx(),然后将结果装箱为包装类对象。
}

实践建议

1.优先用 parseXxx() 

  • 直接需要基本类型(如计算、比较等)
  • 性能敏感的代码(如高频调用的循环)
  • 不需要包装类对象的场景

2.优先用 valueOf() 

  • 需要包装类对象(如存入集合 List<Integer>)
  • 与泛型配合时(泛型不能使用基本类型)
  • 需要利用包装类的缓存机制(如 Integer.valueOf() 缓存 -128~127)

parseXxx():更快、更直接,适合基本类型操作。

valueOf():返回包装类对象,适合泛型或需要对象特性的场景。

注意事项

数字格式异常:当字符串不能正确转换为数字时会抛出 NumberFormatException

String s = "abc";
int i = Integer.parseInt(s);  // 抛出 NumberFormatException

布尔值转换:Boolean.parseBoolean() 不区分大小写,但只有 "true" 会转为 true,其他任何字符串都会转为 false

字符转换:String 转 char 需要特殊处理

String s = "A";
char c = s.charAt(0);  // 'A'

性能考虑:在大量转换时,parseXxx() 通常比 valueOf() 性能稍好

空值处理:转换前最好检查字符串是否为 null

String s = null;
int i = s == null ? 0 : Integer.parseInt(s);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值