杰瑞科技汇

Java String转int,如何实现?

使用 Integer.parseInt(String) - 最常用、最推荐

这是最直接、最常用的方法。Integer 类是 int 的包装类,它提供了一个静态方法 parseInt(),专门用于将字符串解析为基本数据类型 int

Java String转int,如何实现?-图1
(图片来源网络,侵删)

语法

int intValue = Integer.parseInt(String str);

示例代码

public class StringToIntExample {
    public static void main(String[] args) {
        String strNumber = "123";
        int number = Integer.parseInt(strNumber);
        System.out.println("转换后的整数是: " + number);
        System.out.println("类型是: " + ((Object)number).getClass().getName()); // 输出 java.lang.Integer
        // 可以进行数学运算
        number = number + 10;
        System.out.println("加10后: " + number);
    }
}

优点

  1. 简单直接:一行代码即可完成转换。
  2. 性能高:这是专门为此设计的原生方法,效率很高。
  3. 返回基本类型:直接返回 int,在很多情况下更方便,尤其是在进行数学运算时。

缺点(非常重要!)

如果字符串不是一个有效的整数表示,它会抛出 NumberFormatException 异常。

以下情况会抛出异常:

  • 字符串包含非数字字符(如 "12a3")。
  • 字符串为空()。
  • 字符串是 null
  • 数字超出 int 的范围(如 2147483648,因为 int 的最大值是 2147483647)。

示例(异常情况)

public class StringToIntExceptionExample {
    public static void main(String[] args) {
        try {
            // 情况1: 包含非数字字符
            String invalidStr1 = "123abc";
            int num1 = Integer.parseInt(invalidStr1); // 抛出 NumberFormatException
        } catch (NumberFormatException e) {
            System.out.println("捕获到异常: 字符串 '" + invalidStr1 + "' 不是有效的整数。");
        }
        try {
            // 情况2: 空字符串
            String invalidStr2 = "";
            int num2 = Integer.parseInt(invalidStr2); // 抛出 NumberFormatException
        } catch (NumberFormatException e) {
            System.out.println("捕获到异常: 字符串 '" + invalidStr2 + "' 不是有效的整数。");
        }
        try {
            // 情况3: null
            String invalidStr3 = null;
            int num3 = Integer.parseInt(invalidStr3); // 抛出 NullPointerException
        } catch (NullPointerException e) {
            System.out.println("捕获到异常: 字符串是 null。");
        }
        try {
            // 情况4: 超出范围
            String invalidStr4 = "2147483648"; // int最大值是 2147483647
            int num4 = Integer.parseInt(invalidStr4); // 抛出 NumberFormatException
        } catch (NumberFormatException e) {
            System.out.println("捕获到异常: 数字 '" + invalidStr4 + "' 超出了 int 范围。");
        }
    }
}

使用 Integer.valueOf(String) - 返回包装类 Integer

Integer.valueOf() 方法也可以将字符串转换为整数,但它与 parseInt() 有一个关键区别:它返回的是 Integer 对象(包装类型),而不是基本类型 int

语法

Integer integerObject = Integer.valueOf(String str);

示例代码

public class StringToIntegerObjectExample {
    public static void main(String[] args) {
        String strNumber = "456";
        Integer integerObject = Integer.valueOf(strNumber);
        System.out.println("转换后的Integer对象是: " + integerObject);
        System.out.println("类型是: " + integerObject.getClass().getName()); // 输出 java.lang.Integer
        // 可以自动拆箱(Unboxing)进行数学运算
        int number = integerObject + 5;
        System.out.println("加5后: " + number);
    }
}

优点

  1. 返回对象:在需要 Integer 对象的场景下(例如在泛型集合 List<Integer> 中)非常有用。
  2. 可以享受自动拆箱的便利:当代码需要 int 时,Java 会自动将 Integer 对象拆箱为 int

缺点

  1. 返回包装类型:如果你明确需要一个 int,使用它需要多一个自动拆箱的步骤。
  2. 同样会抛出异常:和 parseInt() 一样,如果字符串格式不正确,同样会抛出 NumberFormatException

使用 Integer(String) 构造函数 - 不推荐

Integer 类有一个构造函数,它接受一个 String 参数,在早期版本的 Java 中,这是转换字符串为 Integer 对象的方式。从 Java 9 开始,这个构造函数已经被标记为 @Deprecated(已弃用),不推荐使用。

Java String转int,如何实现?-图2
(图片来源网络,侵删)

语法(不推荐)

Integer integerObject = new Integer(String str);

为什么不推荐?

  1. 性能较差:创建一个新对象比调用静态方法 valueOf()parseInt() 要慢。
  2. 可读性差:使用静态方法是更现代、更清晰的风格。
  3. 已弃用:官方文档明确表示不鼓励使用,未来可能会被移除。

替代方案

  • 如果你需要一个 Integer 对象,请使用 Integer.valueOf()
  • 如果你需要一个 int 基本类型,请使用 Integer.parseInt()

总结与最佳实践

方法 返回类型 异常处理 推荐场景 备注
Integer.parseInt() int (基本类型) 抛出 NumberFormatException 最推荐,当你需要一个 int 值来进行计算或赋值给 int 变量时。 性能高,直接。
Integer.valueOf() Integer (包装类) 抛出 NumberFormatException 当你需要一个 Integer 对象时(用于泛型集合)。 会返回缓存的对象(在 -128127 范围内),可能有助于节省内存。
new Integer() Integer (包装类) 抛出 NumberFormatException 不推荐 已弃用,性能较差。

如何选择?

  1. 默认选择 Integer.parseInt():在 95% 的情况下,你都需要一个 int 值来处理数字,这是最直接、最高效的选择。
  2. 使用 try-catch 处理异常:由于 parseInt()valueOf() 都会抛出异常,你必须确保代码的健壮性,如果输入数据可能无效(来自用户输入或文件),必须使用 try-catch
public static int convertStringToInt(String str) {
    try {
        // 使用 parseInt(),因为我们只需要一个 int 值
        return Integer.parseInt(str);
    } catch (NumberFormatException e) {
        // 处理无效输入,可以返回一个默认值(如0)或抛出自定义异常
        System.err.println("错误: 无法将字符串 '" + str + "' 转换为整数。");
        return 0; // 或者 throw new MyCustomException("Invalid number format");
    }
}
  1. 检查 null 和空字符串:在调用 parseInt() 之前,最好先检查字符串是否为 null 或空,这样可以避免异常,让代码逻辑更清晰。
public static int safeConvert(String str) {
    if (str == null || str.trim().isEmpty()) {
        System.out.println("输入为空,返回默认值 0");
        return 0;
    }
    try {
        return Integer.parseInt(str);
    } catch (NumberFormatException e) {
        System.out.println("格式错误,返回默认值 0");
        return 0;
    }
}
Java String转int,如何实现?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇