杰瑞科技汇

Java String类型转换有哪些常用方法?

Java 中的字符串转换主要可以分为两大类:

Java String类型转换有哪些常用方法?-图1
(图片来源网络,侵删)
  1. 将其他类型转换为 String
  2. String 转换为其他类型

其他类型转换为 String (Convert to String)

有几种常用且推荐的方法,它们的性能略有不同。

使用 String.valueOf() (最推荐)

这是最常用、最安全的方法,它是一个静态方法,可以接受几乎所有基本数据类型和对象作为参数,并将其转换为字符串。

特点:

  • 通用性强:适用于所有基本数据类型 (int, double, boolean 等) 和对象。
  • 处理 null 安全:如果传入的参数是 nullString.valueOf(null) 会返回字符串 "null",而不会抛出 NullPointerException

示例代码:

Java String类型转换有哪些常用方法?-图2
(图片来源网络,侵删)
int num = 123;
boolean flag = true;
double pi = 3.14159;
Object obj = null;
// 基本类型转换
String str1 = String.valueOf(num);      // 结果: "123"
String str2 = String.valueOf(flag);     // 结果: "true"
String str3 = String.valueOf(pi);      // 结果: "3.14159"
// 对象转换
String str4 = String.valueOf(obj);      // 结果: "null" (非常安全)

使用 String 的 拼接 (最直观)

这是最直观、最简单的方式,尤其适用于字符串拼接,当任何类型与 String 通过 连接时,Java 会自动调用该类型的 toString() 方法。

特点:

  • 简单直观:代码易读。
  • 性能问题:在循环中进行大量字符串拼接时,会创建多个临时 String 对象,导致性能下降,应优先使用 StringBuilderStringBuffer
  • null 不安全:如果拼接的对象是 null,会得到 "null" 字符串,但拼接操作本身不会报错。

示例代码:

int num = 456;
boolean flag = false;
String str1 = num + "";                // 结果: "456"
String str2 = "The value is: " + num;  // 结果: "The value is: 456"
String str3 = flag + "";               // 结果: "false"

调用对象的 toString() 方法

每个 Java 对象都继承自 Object 类,而 Object 类中定义了 toString() 方法,任何对象都可以调用此方法来获取其字符串表示形式。

特点:

  • 面向对象:是对象自身提供的方法。
  • 可能需要重写:很多类(如自定义类)默认的 toString() 返回的是类的全限定名和哈希码(如 com.example.MyClass@1a2b3c4d),通常需要重写以返回有意义的信息。
  • null 不安全:如果对象本身是 null,调用 toString() 会直接抛出 NullPointerException

示例代码:

Integer integerObj = 789;
String str1 = integerObj.toString();    // 结果: "789"
// 自定义类示例
class Person {
    private String name;
    public Person(String name) { this.name = name; }
    @Override
    public String toString() {
        return "Person[name=" + this.name + "]";
    }
}
Person person = new Person("Alice");
String str2 = person.toString();        // 结果: "Person[name=Alice]"
// Integer objNull = null;
// String str3 = objNull.toString(); // 抛出 NullPointerException

使用 String.format() (格式化转换)

当你需要按照特定格式将其他类型转换为字符串时,String.format() 是一个非常强大的选择,它类似于 C 语言中的 printf

特点:

  • 格式化输出:可以控制数字的精度、宽度、对齐方式等。
  • 可读性好:格式化字符串清晰明了。

示例代码:

int num = 100;
double price = 99.987;
String str1 = String.format("Number: %d", num);              // 结果: "Number: 100"
String str2 = String.format("Price: %.2f", price);           // 结果: "Price: 99.99" (保留两位小数)
String str3 = String.format("Hello, %s! Your score is %d.", "Bob", 95); // 结果: "Hello, Bob! Your score is 95."

String 转换为其他类型 (Convert from String)

将字符串转换为其他类型时,最核心的问题是处理可能出现的格式错误,将字符串 "abc" 转换为整数 int 就会失败。

使用包装类的 parseXxx()valueOf() 方法 (最常用)

每个基本数据类型(int, long, double, boolean 等)都有一个对应的包装类(Integer, Long, Double, Boolean 等),这些包装类提供了静态方法来解析字符串。

  • parseXxx(String s): 将字符串解析为对应的基本数据类型,如果字符串格式不正确,会抛出 NumberFormatException
  • valueOf(String s): 将字符串解析为对应的包装类对象,内部也是调用 parseXxx(),如果字符串格式不正确,同样会抛出 NumberFormatException

特点:

  • 标准方法:这是进行类型转换的标准做法。
  • 必须处理异常:调用时必须用 try-catch 包裹,或者确保字符串格式绝对正确,否则程序会崩溃。

示例代码:

String strNum = "123";
String strBool = "true";
String strDouble = "3.14";
String strInvalid = "abc";
// String -> int (基本类型)
int num = Integer.parseInt(strNum); // 结果: 123
// int num2 = Integer.parseInt(strInvalid); // 抛出 NumberFormatException
// String -> Integer (包装类对象)
Integer integerObj = Integer.valueOf(strNum); // 结果: 123 (Integer对象)
// String -> boolean
boolean flag = Boolean.parseBoolean(strBool); // 结果: true
// 注意: Boolean.parseBoolean 对非 "true" (不区分大小写) 的字符串都返回 false
boolean flag2 = Boolean.parseBoolean("false"); // 结果: false
boolean flag3 = Boolean.parseBoolean("TRUE");  // 结果: true
boolean flag4 = Boolean.parseBoolean("yes");   // 结果: false
// String -> double
double d = Double.parseDouble(strDouble); // 结果: 3.14

处理带 null 或空字符串的情况

直接调用 parseXxx() 在遇到 null 或空字符串 时也会抛出异常,在实际开发中,优雅地处理这些情况非常重要。

最佳实践:

  1. 检查 null:在转换前,先判断字符串是否为 null
  2. 检查空字符串:使用 isEmpty()length() == 0 检查。
  3. 提供默认值:当转换失败时,可以返回一个预设的默认值。

示例代码(安全转换):

public class SafeConverter {
    public static int safeParseInt(String str, int defaultValue) {
        if (str == null || str.trim().isEmpty()) {
            return defaultValue;
        }
        try {
            return Integer.parseInt(str.trim()); // 去除首尾空格是个好习惯
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
    public static void main(String[] args) {
        String s1 = "  100  ";
        String s2 = "abc";
        String s3 = "";
        String s4 = null;
        System.out.println(safeParseInt(s1, -1)); // 输出: 100
        System.out.println(safeParseInt(s2, -1)); // 输出: -1 (默认值)
        System.out.println(safeParseInt(s3, -1)); // 输出: -1 (默认值)
        System.out.println(safeParseInt(s4, -1)); // 输出: -1 (默认值)
    }
}

使用 Number 类的 doubleValue() 等方法

Integer, Long, Double, Float 等数值包装类都继承自 Number 类,你可以先将字符串解析为 Number 对象,然后再获取你需要的具体类型。

特点:

  • 灵活性:当你不确定字符串是整数还是浮点数时,可以先解析为 DoubleBigDecimal

示例代码:

String strNum = "123.45";
// 先解析为 Double
Number number = Double.parseDouble(strNum);
// 再获取不同类型的值
int intValue = number.intValue();     // 结果: 123 (会丢失精度)
long longValue = number.longValue();   // 结果: 123
double doubleValue = number.doubleValue(); // 结果: 123.45

总结与最佳实践

转换方向 方法 推荐度 关键点
其他类型 -> String String.valueOf() ⭐⭐⭐⭐⭐ (最推荐) 通用、安全,处理 null 不会报错。
拼接 ⭐⭐⭐ 直观,但循环中性能差。
toString() ⭐⭐ 面向对象,但 null 不安全,且可能需要重写。
String.format() ⭐⭐⭐⭐ 格式化,适合需要格式输出的场景。
String -> 其他类型 包装类 parseXxx() ⭐⭐⭐⭐⭐ (最推荐) 标准方法,但必须处理 NumberFormatException
包装类 valueOf() ⭐⭐⭐⭐ 返回包装类对象,同样需要处理异常。
安全转换 try-catch + 默认值 ⭐⭐⭐⭐⭐ 生产环境必备,优雅地处理 null、空串和格式错误。

核心建议:

  1. 将其他类型转为 String:优先使用 String.valueOf()
  2. 将 String 转为其他类型:优先使用包装类的 parseXxx() 方法,并用 try-catch 块来捕获可能的 NumberFormatException
  3. 处理 null 和空字符串:在转换前进行检查,这是健壮代码的关键,可以封装自己的工具方法来简化这个过程。
分享:
扫描分享到社交APP
上一篇
下一篇