ZetCode

Java Integer 类

最后修改时间:2025 年 4 月 13 日

java.lang.Integer 类是原始 int 类型的包装类。 它提供了用于将整数值与 String 相互转换、执行数值运算以及处理有用常量的方法。 作为 Java 包装类的一部分,Integer 使原始值能够用作对象,使其与集合和泛型 API 兼容。

Integer 类是不可变的,这意味着它的值在创建后无法更改。 它封装了原始 int 值,同时提供了用于解析、比较和位操作的实用方法。 该类还为常用整数值提供缓存,通过重用实例而不是创建新实例来提高性能。

Integer 类方法

Integer 类包括许多用于处理整数值的静态和实例方法。 主要方法包括

此外,该类还定义了重要的常量

通过利用这些方法和常量,开发人员可以高效地处理整数值,同时确保与 Java 的面向对象特性兼容。

创建 Integer 对象

可以使用 valueOf 方法或自动装箱创建 Integer 对象。 优先使用 valueOf 方法,因为它可能会重用常用值的缓存实例,从而提高内存效率。 自动装箱会自动将原始 int 值转换为 Integer 对象,例如在将它们存储在集合中时。

Integer 对象缓存

Integer.valueOf 方法受益于 -128127 范围内的值的缓存。 比较小整数值时,== 可能会返回 true,因为两个引用都指向同一个缓存实例。 但是,对于**大于 127** 的值,会创建新实例,使 == 返回 false。 在这种情况下,应始终使用 equals 进行正确的价值比较。

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        // Using valueOf() methods (recommended)
        Integer num1 = Integer.valueOf(42);
        Integer num2 = Integer.valueOf("42");

        // Autoboxing (automatically uses valueOf internally)
        Integer num3 = 42;

        System.out.println("num1: " + num1);
        System.out.println("num2: " + num2);
        System.out.println("num3: " + num3);

        // Comparing references (demonstrates caching)
        System.out.println("num1 == num2: " + (num1 == num2));
        System.out.println("num1 == num3: " + (num1 == num3));

        // Demonstrating failure of == comparison for values > 127
        Integer num4 = Integer.valueOf(150);
        Integer num5 = 150;

        System.out.println("num4: " + num4);
        System.out.println("num5: " + num5);
        System.out.println("num4 == num5: " + (num4 == num5));
        System.out.println("num4.equals(num5): " + num4.equals(num5)); 
    }
}

此示例演示了创建 Integer 对象的不同方法,展示了 Java 的整数对象缓存行为和比较的最佳实践。

将字符串解析为整数

Integer 类提供了几种将字符串解析为整数值的方法。 parseInt 方法将字符串转换为原始 int,而 valueOf 返回一个 Integer 对象。 两者都会为无效输入抛出 NumberFormatException

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        // Parsing decimal strings
        String decimalStr = "12345";
        int primitiveInt = Integer.parseInt(decimalStr);
        Integer objectInt = Integer.valueOf(decimalStr);
        
        // Parsing with different radix (base)
        String binaryStr = "1101";
        int binaryInt = Integer.parseInt(binaryStr, 2);
        
        String hexStr = "FF";
        int hexInt = Integer.parseInt(hexStr, 16);
        
        System.out.println("Decimal parse: " + primitiveInt);
        System.out.println("Decimal valueOf: " + objectInt);
        System.out.println("Binary 1101: " + binaryInt);
        System.out.println("Hex FF: " + hexInt);
        
        try {
            Integer invalid = Integer.valueOf("12a45");
        } catch (NumberFormatException e) {
            System.out.println("Error parsing: " + e.getMessage());
        }
    }
}

此示例展示了如何使用不同的数字基数将字符串解析为整数。 parseIntvalueOf 方法可以处理从 2 到 36 的各种基数值。 该示例还演示了无效数字字符串的异常处理。

将整数转换为字符串

Integer 类提供了多种将整数转换为字符串表示形式的方法。 这些包括用于十进制、二进制、八进制和十六进制格式的 toString 方法。 提供静态方法和实例方法。

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        int number = 255;
        Integer numObj = 255;
        
        // Using static toString methods
        System.out.println("Decimal: " + Integer.toString(number));
        System.out.println("Binary: " + Integer.toBinaryString(number));
        System.out.println("Octal: " + Integer.toOctalString(number));
        System.out.println("Hex: " + Integer.toHexString(number));
        
        // Using instance toString method
        System.out.println("Object toString: " + numObj.toString());
        
        // Formatting with leading zeros
        System.out.println("Padded binary: " + 
            String.format("%8s", Integer.toBinaryString(number)).replace(' ', '0'));
        
        // Using toString with radix
        System.out.println("Base 5: " + Integer.toString(number, 5));
    }
}

此示例演示了以不同格式将整数转换为字符串的各种方法。 静态 toXxxString() 方法提供常见的基数转换,而 toString(int i, int radix) 允许从 2 到 36 的任何基数。 该示例还展示了如何使用前导零格式化二进制字符串。

比较整数值

可以使用各种方法比较 Integer 对象。 compareTo 方法比较两个 Integer 对象,而 compare 是一个静态方法,用于比较原始 int。 equals 方法检查对象的价值相等性。

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        Integer a = 10;
        Integer b = 20;
        Integer c = 10;
        int d = 10;
        
        // Using compareTo
        System.out.println("a.compareTo(b): " + a.compareTo(b));
        System.out.println("a.compareTo(c): " + a.compareTo(c));
        
        // Using static compare
        System.out.println("Integer.compare(a, b): " + Integer.compare(a, b));
        System.out.println("Integer.compare(a, c): " + Integer.compare(a, c));
        
        // Using equals
        System.out.println("a.equals(b): " + a.equals(b));
        System.out.println("a.equals(c): " + a.equals(c));
        
        // Comparing with primitive
        System.out.println("a == d: " + (a == d)); // auto-unboxing
    }
}

此示例展示了比较整数值的不同方法。 compareTocompare 方法返回负值、零值或正值,指示排序。 equals 方法检查值相等性,而 == 比较引用(除非发生原始类型的自动拆箱)。

位操作方法

Integer 类提供了几个用于对整数进行位级操作的方法。 这些包括位计数、旋转、反转和符号操作。 这些方法对于底层编程和性能敏感的代码很有用。

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        int number = 0b10101010; // Binary 10101010 (170 decimal)
        
        System.out.println("Original: " + Integer.toBinaryString(number));
        System.out.println("Bit count: " + Integer.bitCount(number));
        System.out.println("Highest one bit: " + 
            Integer.toBinaryString(Integer.highestOneBit(number)));
        System.out.println("Lowest one bit: " + 
            Integer.toBinaryString(Integer.lowestOneBit(number)));
        System.out.println("Number of leading zeros: " + 
            Integer.numberOfLeadingZeros(number));
        System.out.println("Number of trailing zeros: " + 
            Integer.numberOfTrailingZeros(number));
        System.out.println("Reversed bits: " + 
            Integer.toBinaryString(Integer.reverse(number)));
        System.out.println("Rotated left by 2: " + 
            Integer.toBinaryString(Integer.rotateLeft(number, 2)));
    }
}

此示例演示了 Integer 类中可用的各种位操作方法。 这些方法对整数的二进制表示形式进行操作,提供有关位模式的信息并启用位级转换。 结果以二进制形式显示以提高清晰度。

Integer 常量和大小方法

Integer 类定义了几个有用的常量和与大小相关的方法。 这些包括 MIN_VALUEMAX_VALUE,分别表示 int 的范围,以及 SIZEBYTES,分别表示以位和字节为单位的大小。

Main.java
package com.zetcode;

public class Main {

    public static void main(String[] args) {

        System.out.println("Integer.MIN_VALUE: " + Integer.MIN_VALUE);
        System.out.println("Integer.MAX_VALUE: " + Integer.MAX_VALUE);
        System.out.println("Integer.SIZE: " + Integer.SIZE + " bits");
        System.out.println("Integer.BYTES: " + Integer.BYTES + " bytes");
        
        // Using size-related methods
        int number = 123456789;
        System.out.println("Signum of " + number + ": " + Integer.signum(number));
        System.out.println("Signum of -" + number + ": " + Integer.signum(-number));
        System.out.println("Signum of 0: " + Integer.signum(0));
        
        // Unsigned operations
        int unsignedCompare = Integer.compareUnsigned(-1, 1);
        System.out.println("Unsigned compare -1 and 1: " + unsignedCompare);
    }
}

此示例展示了 Integer 类常量和大小相关方法的使用。 MIN_VALUEMAX_VALUE 常量定义了有效 int 值的范围。 signum 方法返回数字的符号,而 compareUnsigned 执行比较,将整数视为无符号值。

来源

Java Integer 类文档

在本文中,我们通过实际示例介绍了 Java Integer 类。 理解这些方法对于在 Java 中处理整数值至关重要,尤其是在处理转换、解析和位操作时。

作者

我的名字是 Jan Bodnar,我是一名敬业的程序员,在该领域拥有多年的经验。 我于 2007 年开始撰写编程文章,至今已撰写了 1,400 多篇文章和八本电子书。 凭借超过八年的教学经验,我致力于分享我的知识并帮助他人掌握编程概念。

列出所有Java教程