杰瑞科技汇

Java String转Integer,有哪些常用方法?

核心方法

最核心和推荐的方法是使用 Integer 类的静态方法。

Java String转Integer,有哪些常用方法?-图1
(图片来源网络,侵删)

Integer.parseInt(String s)

这是最常用、最直接的方法,它将 String 参数解析为 int 原始类型。

  • 特点

    • 返回 int 原始数据类型。
    • String 不是有效的整数表示,会抛出 NumberFormatException
    • 性能最好,因为它不涉及对象的创建。
  • 示例代码

    public class StringToIntExample {
        public static void main(String[] args) {
            String strNumber = "123";
            // 使用 parseInt() 将 String 转换为 int
            int number = Integer.parseInt(strNumber);
            System.out.println("转换后的 int 值: " + number);
            System.out.println("类型: " + ((Object)number).getClass().getName()); // 输出 int
            // 另一个例子
            String negativeStr = "-456";
            int negativeNum = Integer.parseInt(negativeStr);
            System.out.println("转换后的负数: " + negativeNum);
            // 处理带空格的字符串(需要先trim)
            String spacedStr = "  789  ";
            int spacedNum = Integer.parseInt(spacedStr.trim());
            System.out.println("处理空格后的转换: " + spacedNum);
        }
    }

Integer.valueOf(String s)

这个方法将 String 参数解析为一个 Integer 对象(int 的包装类)。

Java String转Integer,有哪些常用方法?-图2
(图片来源网络,侵删)
  • 特点

    • 返回 Integer 对象。
    • String 不是有效的整数表示,同样会抛出 NumberFormatException
    • 它内部会先调用 parseInt(),然后返回一个 Integer 实例,在 Java 5 之后,它会利用 Integer 缓存池(-128 到 127 之间的数字),如果数字在此范围内,会返回缓存的实例,有助于节省内存。
  • 示例代码

    public class StringToIntegerObjectExample {
        public static void main(String[] args) {
            String strNumber = "123";
            // 使用 valueOf() 将 String 转换为 Integer 对象
            Integer numberObject = Integer.valueOf(strNumber);
            System.out.println("转换后的 Integer 对象: " + numberObject);
            System.out.println("类型: " + numberObject.getClass().getName()); // 输出 java.lang.Integer
            // 另一个例子
            String strForCache = "100";
            Integer obj1 = Integer.valueOf(strForCache);
            Integer obj2 = Integer.valueOf(strForCache);
            // 对于 -128 到 127 之间的数字,valueOf 会返回同一个缓存对象
            System.out.println("obj1 和 obj2 是同一个对象吗? " + (obj1 == obj2)); // 输出 true
            String strForNew = "200";
            Integer obj3 = Integer.valueOf(strForNew);
            Integer obj4 = Integer.valueOf(strForNew);
            // 超出缓存范围的数字,会创建新的对象
            System.out.println("obj3 和 obj4 是同一个对象吗? " + (obj3 == obj4)); // 输出 false
        }
    }

处理异常(非常重要)

在实际开发中,你不能假设输入的 String 总是有效的数字,处理 NumberFormatException 至关重要。

最佳实践:使用 try-catch

这是处理可能无效输入的标准方法。

Java String转Integer,有哪些常用方法?-图3
(图片来源网络,侵删)
public class SafeConversionExample {
    public static void main(String[] args) {
        String input1 = "2025";
        String input2 = "abc";
        String input3 = null; // 空指针的情况
        String input4 = "12345678901234567890"; // 超出 int 范围
        convertAndPrint(input1);
        convertAndPrint(input2);
        convertAndPrint(input3);
        convertAndPrint(input4);
    }
    public static void convertAndPrint(String str) {
        if (str == null) {
            System.out.println("输入为 null,无法转换。");
            return;
        }
        try {
            // 使用 parseInt() 进行转换
            int number = Integer.parseInt(str);
            System.out.println("成功转换: '" + str + "' -> " + number);
        } catch (NumberFormatException e) {
            // 捕获数字格式异常
            System.out.println("转换失败: '" + str + "' 不是有效的整数。");
        }
    }
}

输出

成功转换: '2025' -> 2025
转换失败: 'abc' 不是有效的整数。
输入为 null,无法转换。
转换失败: '12345678901234567890' 不是有效的整数。

方法对比与如何选择

特性 Integer.parseInt(String) Integer.valueOf(String)
返回类型 int (原始类型) Integer (对象)
抛出异常 NumberFormatException NumberFormatException
性能 稍高,直接返回基本类型,无对象开销。 稍低,需要创建/获取 Integer 对象。
适用场景 - 需要进行数学计算,不关心对象特性。
- 在性能敏感的代码中。
- 当你需要 int 类型(数组索引、循环计数器)。
- 需要将结果存入 List<Integer>Map 等集合中。
- 当你需要利用 Integer 的方法(如 toString(), compareTo())。
- 当你需要利用 Integer 的缓存特性。

简单选择指南

  1. 如果你需要一个 int:使用 Integer.parseInt()
  2. 如果你需要一个 Integer 对象:使用 Integer.valueOf()
  3. 如果输入可能无效:始终使用 try-catch 块来处理 NumberFormatException

其他不推荐的方法(了解即可)

通过 Integer 构造函数

在 Java 9 之前,你可以通过 new Integer(String) 来创建一个 Integer 对象。

// Java 9 之前可行,但已废弃
String str = "123";
Integer number = new Integer(str); // 已被标记为 @Deprecated

为什么不推荐?

  • 已废弃:自 Java 9 起,该构造函数已被废弃,官方文档明确指出,应该使用静态的 valueOf() 方法。
  • 性能差:它总是创建一个新的 Integer 实例,无法利用 Integer 的缓存池,效率低于 valueOf()

使用 Number

String 没有直接的方法可以转换为 Number,但你可以先转换为 DoubleBigDecimal,然后再转换为 Integer,这种方法非常繁琐且不必要,只适用于一些非常特殊的情况(字符串是科学计数法表示的数字,如 "1.23E2")。

String str = "123.45";
// 这种方法不适用于普通整数转换,且会丢失精度
Number number = Double.parseDouble(str);
int intValue = number.intValue(); // 结果是 123

为什么不推荐?

  • 过度复杂:对于简单的整数转换,这是“杀鸡用牛刀”。
  • 精度丢失:如果字符串包含小数,直接 intValue() 会截断小数部分,而不是抛出异常,容易隐藏错误。
方法 推荐度 描述
Integer.parseInt() ⭐⭐⭐⭐⭐ 首选,当需要 int 原始类型时,性能最好。
Integer.valueOf() ⭐⭐⭐⭐⭐ 首选,当需要 Integer 对象时,是现代 Java 的标准做法。
try-catch ⭐⭐⭐⭐⭐ 必须,与上述方法结合使用,确保代码健壮性。
new Integer() 不推荐,已废弃,性能不佳。
Double.parseDouble() 不推荐,仅用于处理特殊格式的数字,不适合普通转换。

parseIntvalueOf 是你工具箱里的主力,而 try-catch 是你的安全带

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