Java Integer 类
最后修改时间:2025 年 4 月 13 日
java.lang.Integer 类是原始 int 类型的包装类。 它提供了用于将整数值与 String 相互转换、执行数值运算以及处理有用常量的方法。 作为 Java 包装类的一部分,Integer 使原始值能够用作对象,使其与集合和泛型 API 兼容。
Integer 类是不可变的,这意味着它的值在创建后无法更改。 它封装了原始 int 值,同时提供了用于解析、比较和位操作的实用方法。 该类还为常用整数值提供缓存,通过重用实例而不是创建新实例来提高性能。
Integer 类方法
Integer 类包括许多用于处理整数值的静态和实例方法。 主要方法包括
parseInt(String s)- 将字符串转换为原始int。valueOf(int i)- 返回一个表示指定int值的Integer对象,受益于常用值的缓存。compare(int x, int y)- 比较两个整数值。bitCount(int i)- 返回整数的二进制表示形式中设置的位数 (1s)。toBinaryString(int i)- 将整数转换为二进制字符串表示形式。
此外,该类还定义了重要的常量
Integer.MIN_VALUE- 最小可能的int值 (-231)。Integer.MAX_VALUE- 最大可能的int值 (231 - 1)。
通过利用这些方法和常量,开发人员可以高效地处理整数值,同时确保与 Java 的面向对象特性兼容。
创建 Integer 对象
可以使用 valueOf 方法或自动装箱创建 Integer 对象。 优先使用 valueOf 方法,因为它可能会重用常用值的缓存实例,从而提高内存效率。 自动装箱会自动将原始 int 值转换为 Integer 对象,例如在将它们存储在集合中时。
Integer 对象缓存
Integer.valueOf 方法受益于 -128 到 127 范围内的值的缓存。 比较小整数值时,== 可能会返回 true,因为两个引用都指向同一个缓存实例。 但是,对于**大于 127** 的值,会创建新实例,使 == 返回 false。 在这种情况下,应始终使用 equals 进行正确的价值比较。
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。
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());
}
}
}
此示例展示了如何使用不同的数字基数将字符串解析为整数。 parseInt 和 valueOf 方法可以处理从 2 到 36 的各种基数值。 该示例还演示了无效数字字符串的异常处理。
将整数转换为字符串
Integer 类提供了多种将整数转换为字符串表示形式的方法。 这些包括用于十进制、二进制、八进制和十六进制格式的 toString 方法。 提供静态方法和实例方法。
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 方法检查对象的价值相等性。
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
}
}
此示例展示了比较整数值的不同方法。 compareTo 和 compare 方法返回负值、零值或正值,指示排序。 equals 方法检查值相等性,而 == 比较引用(除非发生原始类型的自动拆箱)。
位操作方法
Integer 类提供了几个用于对整数进行位级操作的方法。 这些包括位计数、旋转、反转和符号操作。 这些方法对于底层编程和性能敏感的代码很有用。
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_VALUE 和 MAX_VALUE,分别表示 int 的范围,以及 SIZE 和 BYTES,分别表示以位和字节为单位的大小。
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_VALUE 和 MAX_VALUE 常量定义了有效 int 值的范围。 signum 方法返回数字的符号,而 compareUnsigned 执行比较,将整数视为无符号值。
来源
在本文中,我们通过实际示例介绍了 Java Integer 类。 理解这些方法对于在 Java 中处理整数值至关重要,尤其是在处理转换、解析和位操作时。
作者
列出所有Java教程。