杰瑞科技汇

Java中string与int如何相互转换?

Stringint (将字符串转换为整数)

有三种主要方法可以实现这个转换。

Java中string与int如何相互转换?-图1
(图片来源网络,侵删)

Integer.parseInt(String s) - 最常用

这是最直接、最常用的方法,它会尝试将字符串解析为一个有符号的十进制整数。

特点:

  • 静态方法:直接通过 Integer 类调用。
  • 性能高:这是为基本类型转换而优化的方法。
  • 抛出异常:如果字符串不是一个有效的整数表示,会抛出 NumberFormatException

示例代码:

public class StringToIntExample {
    public static void main(String[] args) {
        // --- 成功的情况 ---
        String str1 = "123";
        int num1 = Integer.parseInt(str1);
        System.out.println("转换成功: " + str1 + " -> " + num1);
        System.out.println(num1 + 10); // 输出: 133
        // --- 失败的情况 ---
        String str2 = "hello";
        try {
            int num2 = Integer.parseInt(str2);
            System.out.println("这行不会被执行");
        } catch (NumberFormatException e) {
            System.err.println("转换失败: '" + str2 + "' 不是有效的整数。");
        }
        // --- 其他常见情况 ---
        String str3 = "  123  "; // 包含空格
        // Integer.parseInt() 无法处理前后的空格,会抛出异常
        try {
            int num3 = Integer.parseInt(str3);
        } catch (NumberFormatException e) {
            System.err.println("转换失败: '" + str3 + "' 包含空格,无法直接转换。");
            // 解决方案:先使用 trim() 去除空格
            int num3_trimmed = Integer.parseInt(str3.trim());
            System.out.println("使用 trim() 后转换成功: " + num3_trimmed);
        }
        String str4 = "123.45"; // 包含小数点
        // 会抛出异常
        try {
            int num4 = Integer.parseInt(str4);
        } catch (NumberFormatException e) {
            System.err.println("转换失败: '" + str4 + "' 包含小数点,无法转换为 int。");
        }
    }
}

Integer.valueOf(String s) - 返回 Integer 对象

这个方法功能和 parseInt 类似,但它返回的是一个 Integer 对象(int 的包装类),而不是基本类型 int

Java中string与int如何相互转换?-图2
(图片来源网络,侵删)

特点:

  • 静态方法
  • 返回 Integer 对象:在需要 Integer 对象的场景下(例如在泛型集合 List<Integer> 中)非常有用。
  • 抛出异常:同样,如果格式无效,会抛出 NumberFormatException
  • 有缓存:在 Java 5 之后,valueOf 会缓存一定范围内的 Integer 对象(通常是 -128 到 127),这比 new Integer() 更节省内存。

示例代码:

public class StringToIntegerObjectExample {
    public static void main(String[] args) {
        String str = "456";
        // 返回 Integer 对象
        Integer integerObj = Integer.valueOf(str);
        // 可以自动拆箱 (unboxing) 为 int 类型
        int num = integerObj; 
        System.out.println("转换成功: " + str + " -> " + num);
        // 可以直接用于需要 Integer 对象的地方
        java.util.List<Integer> list = new java.util.ArrayList<>();
        list.add(Integer.valueOf("789")); // 正确
        // list.add(Integer.parseInt("789")); // 编译错误,因为需要 Integer 对象,不是 int
    }
}

new Integer(String s) - 已过时

这个构造函数也可以将字符串转换为 Integer 对象,但它已经被标记为 @Deprecated (过时)。

为什么不推荐使用?

Java中string与int如何相互转换?-图3
(图片来源网络,侵删)
  • 性能问题:它总是会创建一个新的 Integer 对象,而 Integer.valueOf() 会利用缓存,更高效。
  • 冗余Integer.valueOf() 提供了相同的功能,但性能更好。

示例代码 (仅作了解):

// 不推荐的用法
String str = "999";
Integer integerObj = new Integer(str); // 编译器会警告

Stringint
方法 返回类型 是否抛出异常 备注
Integer.parseInt(s) int (基本类型) 最常用,用于需要基本类型的场景。
Integer.valueOf(s) Integer (对象) 推荐,用于需要 Integer 对象的场景,性能优于 new Integer()
new Integer(s) Integer (对象) 已过时,不推荐使用。

intString (将整数转换为字符串)

有三种主要方法。

String.valueOf(int i) - 最常用、最推荐

这是一个静态方法,可以将任何基本类型或对象转换为 String,它通常被认为是最高效和最清晰的方法。

特点:

  • 静态方法
  • 性能好:直接在底层创建字符串,避免了不必要的对象创建。
  • 不抛出异常:对于 int 类型,这个方法总是能成功执行。

示例代码:

public class IntToStringExample {
    public static void main(String[] args) {
        int num = 789;
        String str1 = String.valueOf(num);
        System.out.println("转换成功: " + num + " -> " + str1);
        System.out.println(str1.length()); // 输出: 3
    }
}

Integer.toString(int i) - 非常好

这是 Integer 类的一个实例方法,功能与 String.valueOf(int) 完全相同,也是转换 intString 的首选方法之一。

特点:

  • 静态方法
  • 性能好:与 String.valueOf(int) 性能相当。
  • 不抛出异常

示例代码:

public class IntToStringExample2 {
    public static void main(String[] args) {
        int num = 101112;
        String str2 = Integer.toString(num);
        System.out.println("转换成功: " + num + " -> " + str2);
    }
}

空字符串拼接 ("" + i) - 简单但稍慢

这是最直观、最简单的方法,通过将一个整数与一个空字符串连接起来,JVM 会自动将整数转换为字符串。

特点:

  • 语法简单
  • 性能稍差:这种方式会创建一个临时的 StringBuilder 对象,虽然现代 JVM 对此优化得很好,但在性能敏感的代码中,前两种方法通常是更好的选择。
  • 可读性:一些开发者认为这种方式代码更简洁,另一些则认为它不够明确。

示例代码:

public class IntToStringExample3 {
    public static void main(String[] args) {
        int num = 202522;
        String str3 = "" + num;
        System.out.println("转换成功: " + num + " -> " + str3);
    }
}

intString
方法 返回类型 备注
String.valueOf(i) String 强烈推荐,清晰、高效,适用于所有基本类型。
Integer.toString(i) String 强烈推荐,功能专一,性能同样出色。
"" + i String 简单直观,性能略逊,但在大多数情况下可以接受。

  1. String -> int

    • 如果你需要一个基本类型 int,请使用 Integer.parseInt()
    • 如果你需要一个Integer 对象,请使用 Integer.valueOf()
    • 永远不要使用 new Integer()
  2. int -> String

    • 优先选择 String.valueOf()Integer.toString(),两者在性能和可读性上都非常出色。
    • "" + i 是一个方便的快捷方式,但在追求极致性能的代码中,应避免使用。
  3. 处理异常

    • 当你从用户输入、文件或网络接收字符串并尝试转换为数字时,始终使用 try-catch 块来捕获 NumberFormatException,不要假设输入总是有效的。
// 一个健壮的转换示例
public static int safeStringToInt(String str, int defaultValue) {
    if (str == null || str.trim().isEmpty()) {
        return defaultValue;
    }
    try {
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        System.out.println("输入 '" + str + "' 无效,使用默认值 " + defaultValue);
        return defaultValue;
    }
}
public static void main(String[] args) {
    int result1 = safeStringToInt("  123  ", -1); // 成功,返回 123
    int result2 = safeStringToInt("abc", -1);    // 失败,返回 -1
    int result3 = safeStringToInt(null, -1);     // 失败,返回 -1
    System.out.println("结果1: " + result1);
    System.out.println("结果2: " + result2);
    System.out.println("结果3: " + result3);
}

分享:
扫描分享到社交APP
上一篇
下一篇