杰瑞科技汇

Java String与int如何互相转换?

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

这是将一个看起来像数字的字符串("123")转换成一个真正的 int 类型变量(123)。

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

使用 Integer.parseInt() (最常用、最标准)

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

语法:

int number = Integer.parseInt(String str);

示例:

String strNumber = "123";
int intNumber = Integer.parseInt(strNumber);
System.out.println(intNumber);       // 输出: 123
System.out.println(intNumber + 10);  // 输出: 133 (可以正常进行数学运算)

⚠️ 重要注意事项:

Java String与int如何互相转换?-图2
(图片来源网络,侵删)
  1. 格式错误: 如果字符串不是有效的整数格式,Integer.parseInt() 会抛出 NumberFormatException 异常。

    • 包含非数字字符: "12a3", "abc"
    • 包含空格: " 123" (开头或结尾的空格也会导致异常)
    • 为空或 null: null 或 (空字符串)
    • 超出范围: 如果数字太大或太小,超出了 int 类型的范围(-2,147,483,648 到 2,147,483,647),也会抛出异常。

    示例 (异常情况):

    try {
        // 会抛出 NumberFormatException
        int num1 = Integer.parseInt("12a3"); 
    } catch (NumberFormatException e) {
        System.out.println("无法将 '12a3' 转换为整数: " + e.getMessage());
    }
    try {
        // 会抛出 NumberFormatException
        int num2 = Integer.parseInt(" 123"); 
    } catch (NumberFormatException e) {
        System.out.println("无法将 ' 123' 转换为整数: " + e.getMessage());
    }
    try {
        // 会抛出 NumberFormatException
        int num3 = Integer.parseInt(""); 
    } catch (NumberFormatException e) {
        System.out.println("无法将 '' 转换为整数: " + e.getMessage());
    }

使用 Integer.valueOf()

这个方法也可以将字符串转换为 int,但它返回的是 Integer 对象(int 的包装类),而不是基本类型 int,这个过程叫做“装箱”。

语法:

Java String与int如何互相转换?-图3
(图片来源网络,侵删)
Integer integerObject = Integer.valueOf(String str);
// 如果需要基本类型,再进行拆箱
int number = integerObject;

示例:

String strNumber = "456";
// 返回一个 Integer 对象
Integer intObject = Integer.valueOf(strNumber); 
// 从 Integer 对象中获取 int 值 (自动拆箱)
int intNumber = intObject; 
System.out.println(intNumber); // 输出: 456

parseInt 的区别:

  • parseInt: 直接返回 int 基本类型。
  • valueOf: 返回 Integer 对象。
  • 在现代 Java(Java 5+)中,由于“自动装箱/拆箱”机制,两者在使用上差别不大。valueOf 在某些情况下(尤其是在循环中频繁创建对象时)可能对性能有微小影响,因为会创建新的 Integer 对象,但对于大多数场景,parseInt 是更清晰的选择。

最佳实践:使用 try-catch 处理异常

当处理来自用户输入或外部数据的字符串时,永远不要直接调用 parseInt 而不进行异常处理,除非你 100% 确保字符串的格式是正确的。

public static String convertStringToInt(String str) {
    try {
        int number = Integer.parseInt(str);
        return "转换成功: " + number;
    } catch (NumberFormatException e) {
        return "转换失败: '" + str + "' 不是有效的整数格式。";
    }
}
public static void main(String[] args) {
    System.out.println(convertStringToInt("789"));   // 输出: 转换成功: 789
    System.out.println(convertStringToInt("abc"));   // 输出: 转换失败: 'abc' 不是有效的整数格式。
    System.out.println(convertStringToInt(" 100")); // 输出: 转换失败: ' 100' 不是有效的整数格式。
}

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

这是将一个 int 变量转换成一个可以显示或拼接的字符串。

使用 String.valueOf() (推荐)

这是最简单、最高效的方法,它接受一个 int 参数并将其转换为 String

语法:

String str = String.valueOf(int number);

示例:

int number = 123;
String strNumber = String.valueOf(number);
System.out.println(strNumber);      // 输出: "123"
System.out.println(strNumber + 10); // 输出: "12310" (字符串拼接)

使用 Integer.toString()

这个方法直接从 Integer 类调用,功能与 String.valueOf() 非常相似,也非常常用。

语法:

String str = Integer.toString(int number);

示例:

int number = 456;
String strNumber = Integer.toString(number);
System.out.println(strNumber); // 输出: "456"

使用空字符串拼接 (简单但不够优雅)

这是最“取巧”的方法,利用了 Java 的类型转换特性,任何类型与字符串 相加,结果都会被转换为字符串。

语法:

String str = "" + int number;

示例:

int number = 789;
String strNumber = "" + number;
System.out.println(strNumber); // 输出: "789"

为什么不推荐这种方法? 虽然它很简单,但在某些复杂的场景下可能会引起混淆,并且性能上通常不如 String.valueOf()Integer.toString(),因为它会创建一个临时的 StringBuilder 对象,在性能要求极高的代码中,应避免使用。

使用 String.format()

当你需要将数字格式化为特定格式的字符串时(补零、添加千位分隔符等),String.format() 是最佳选择。

语法:

String str = String.format(String format, Object... args);

示例:

int number = 99;
// %d 是整数占位符, 04 表示总宽度为4,不足部分用0补齐
String formattedStr = String.format("%04d", number); 
System.out.println(formattedStr); // 输出: "0099"
int largeNumber = 1000000;
// , 表示添加千位分隔符
String formattedStr2 = String.format(%,d", largeNumber);
System.out.println(formattedStr2); // 输出: "1,000,000"

总结与对比

转换方向 推荐方法 语法 说明
String -> int Integer.parseInt() int num = Integer.parseInt(str); 最常用,直接返回基本类型,必须处理 NumberFormatException
Integer.valueOf() Integer obj = Integer.valueOf(str); 返回 Integer 对象,有自动装箱/拆箱,也可用。
int -> String String.valueOf() String str = String.valueOf(num); 最推荐,清晰、高效。
Integer.toString() String str = Integer.toString(num); 同样高效,与 valueOf 一样优秀。
空字符串拼接 String str = "" + num; 简单易记,但性能和可读性稍差,不推荐在性能关键代码中使用。
String.format() String str = String.format("%d", num); 用于格式化输出,功能强大。

完整示例代码

public class StringIntConversion {
    public static void main(String[] args) {
        // ================== String 转 int ==================
        System.out.println("--- String 转 int ---");
        String strNum = "2025";
        String invalidStr = "20a3";
        // 1. 使用 Integer.parseInt()
        try {
            int num1 = Integer.parseInt(strNum);
            System.out.println("parseInt 成功: " + num1);
        } catch (NumberFormatException e) {
            System.out.println("parseInt 失败: " + e.getMessage());
        }
        // 2. 使用 Integer.valueOf()
        try {
            Integer num2Obj = Integer.valueOf(strNum);
            int num2 = num2Obj; // 自动拆箱
            System.out.println("valueOf 成功: " + num2);
        } catch (NumberFormatException e) {
            System.out.println("valueOf 失败: " + e.getMessage());
        }
        // 3. 错误处理示例
        System.out.println("尝试转换无效字符串 '" + invalidStr + "':");
        try {
            Integer.parseInt(invalidStr);
        } catch (NumberFormatException e) {
            System.out.println("捕获到预期异常: " + e.getMessage());
        }
        System.out.println("\n================== int 转 String ==================");
        // ================== int 转 String ==================
        int number = 2025;
        // 1. 使用 String.valueOf() (推荐)
        String str1 = String.valueOf(number);
        System.out.println("String.valueOf(): " + str1);
        // 2. 使用 Integer.toString()
        String str2 = Integer.toString(number);
        System.out.println("Integer.toString(): " + str2);
        // 3. 使用空字符串拼接 (不推荐)
        String str3 = "" + number;
        System.out.println("空字符串拼接: " + str3);
        // 4. 使用 String.format() (用于格式化)
        String str4 = String.format("%05d", number); // 格式化为5位,不足补0
        System.out.println("String.format(): " + str4);
    }
}

输出结果:

--- String 转 int ---
parseInt 成功: 2025
valueOf 成功: 2025
尝试转换无效字符串 '20a3':
捕获到预期异常: For input string: "20a3"
================== int 转 String ==================
String.valueOf(): 2025
Integer.toString(): 2025
空字符串拼接: 2025
String.format(): 02025
分享:
扫描分享到社交APP
上一篇
下一篇