);
4. 普通方法
static int
bitCount(int i)
返回指定的int值的二进制补码二进制表示中的 int
数。
byteValue()
返回此值 Integer
为 byte
的基本收缩转换后。
static int
compare(int x, int y)
比较两个 int
数字值。
compareTo(Integer anotherInteger)
数字比较两个 Integer
对象。
static int
compareUnsigned(int x, int y)
比较两个 int
值,以数值方式将值视为无符号。
static Integer
decode(String nm)
将 String
解码成 Integer
。
static int
divideUnsigned(int dividend, int divisor)
返回将第一个参数除以秒的无符号商,其中每个参数和结果被解释为无符号值。
double
doubleValue()
返回此值 Integer
为 double
一个宽元转换后。
boolean
equals(Object obj)
将此对象与指定的对象进行比较。
float
floatValue()
返回此值 Integer
为 float
一个宽元转换后。
static Integer
getInteger(String nm)
确定具有指定名称的系统属性的整数值。
static Integer
getInteger(String nm, int val)
确定具有指定名称的系统属性的整数值。
static Integer
getInteger(String nm, Integer val)
返回具有指定名称的系统属性的整数值。
hashCode()
返回这个 Integer
的哈希码。
static int
hashCode(int value)
返回值为int
的哈希码; 兼容Integer.hashCode()
。
static int
highestOneBit(int i)
返回一个 int
值与至多一个单个1位,在最高阶(“最左侧”)的位置在指定的一个位 int
值。
intValue()
将 Integer
的值作为 int
。
longValue()
返回此值 Integer
为 long
一个宽元转换后。
static int
lowestOneBit(int i)
在指定的 int
值中,以最低位(最右边)为1位返回一个最多为单个1位的 int
值。
static int
max(int a, int b)
static int
min(int a, int b)
static int
numberOfLeadingZeros(int i)
返回的最高阶的(“最左边的”)中所指定的二进制补码表示的一个位前述零个比特的数量 int
值。
static int
numberOfTrailingZeros(int i)
返回零位以下最低阶(“最右边的”)的数量在指定的二进制补码表示的一个位 int
值。
static int
parseInt(String s)
将字符串参数解析为带符号的十进制整数。
static int
parseInt(String s, int radix)
将字符串参数解析为第二个参数指定的基数中的有符号整数。
static int
parseUnsignedInt(String s)
将字符串参数解析为无符号十进制整数。
static int
parseUnsignedInt(String s, int radix)
将字符串参数解析为第二个参数指定的基数中的无符号整数。
static int
remainderUnsigned(int dividend, int divisor)
返回无符号余数,将第一个参数除以秒,其中每个参数和结果被解释为无符号值。
static int
reverse(int i)
返回由指定的二进制补码表示反转位的顺序而获得的值 int
值。
static int
reverseBytes(int i)
返回反转指定的二进制补码表示的字节顺序而获得的值 int
值。
static int
rotateLeft(int i, int distance)
返回通过旋转指定的二的补码的二进制表示而得到的值 int
由位指定数目的左值。
static int
rotateRight(int i, int distance)
返回通过旋转指定的二的补码的二进制表示而得到的值 int
右移位的指定数值。
short
shortValue()
返回此值 Integer
为 short
的基本收缩转换后。
static int
signum(int i)
返回指定的 int
值的 int
函数。
static int
sum(int a, int b)
根据+运算符将两个整数相加。
static String
toBinaryString(int i)
在基数2中返回整数参数的字符串表示形式为无符号整数。
static String
toHexString(int i)
返回整数参数的字符串表示形式,作为16位中的无符号整数。
static String
toOctalString(int i)
在基数8中返回整数参数的字符串表示形式为无符号整数。
String
toString()
返回 String
表示此对象 Integer
的价值。
static String
toString(int i)
返回一个 String
指定整数的 String
对象。
static String
toString(int i, int radix)
返回由第二个参数指定的基数中的第一个参数的字符串表示形式。
static long
toUnsignedLong(int x)
参数给转换 long
由无符号转换。
static String
toUnsignedString(int i)
将参数的字符串表示形式返回为无符号十进制值。
static String
toUnsignedString(int i, int radix)
以第二个参数指定的基数中的无符号整数值返回第一个参数的字符串表示形式。
static Integer
valueOf(int i)
返回一个 Integer
指定的 int
值的 Integer
实例。
static Integer
valueOf(String s)
返回一个 Integer
对象,保存指定的值为 String
。
static Integer
valueOf(String s, int radix)
返回一个 Integer
对象,保存从指定的String中 String
的值,当用第二个参数给出的基数进行解析时。
4.1. byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue(),这些是继承自 Number 类的方法,返回当前 Integer 对象对应 int 值对应的各种数据类型值(通过强制类型转换,强转到低精度时可能丢失数据)
4.2. compareTo(Integer) 方法
该方法接收一个被比较的 Integer 类对象,并与之比较大小,遵循 Comparable 接口的常规约定:若当前值等于参数值,返回 0;若当前值小于参数值,返回 -1;若当前值大于参数值,返回 1;
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
* Compares two {@code int} values numerically.
* The value returned is identical to what would be returned by:
* <pre>
* Integer.valueOf(x).compareTo(Integer.valueOf(y))
* </pre>
* @param x the first {@code int} to compare
* @param y the second {@code int} to compare
* @return the value {@code 0} if {@code x == y};
* a value less than {@code 0} if {@code x < y}; and
* a value greater than {@code 0} if {@code x > y}
* @since 1.7
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
4.3. decode(String),解码方法,将参数字符串解码得到 Integer,该方法自动识别正负符号和进制符号(如:0x、0、# 等),如 -0xa1 = -161,默认是 正数 和 十进制
public static Integer decode(String nm) throws NumberFormatException {
int radix = 10;
int index = 0;
boolean negative = false;
Integer result;
if (nm.length() == 0)
throw new NumberFormatException("Zero length string");
char firstChar = nm.charAt(0);
// Handle sign, if present
if (firstChar == '-') {
negative = true;
index++;
} else if (firstChar == '+')
index++;
// Handle radix specifier, if present
if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {
index += 2;
radix = 16;
else if (nm.startsWith("#", index)) {
index ++;
radix = 16;
else if (nm.startsWith("0", index) && nm.length() > 1 + index) {
index ++;
radix = 8;
if (nm.startsWith("-", index) || nm.startsWith("+", index))
throw new NumberFormatException("Sign character in wrong position");
try {
result = Integer.valueOf(nm.substring(index), radix);
result = negative ? Integer.valueOf(-result.intValue()) : result;
} catch (NumberFormatException e) {
// If number is Integer.MIN_VALUE, we'll end up here. The next line
// handles this case, and causes any genuine format error to be
// rethrown.
String constant = negative ? ("-" + nm.substring(index))
: nm.substring(index);
result = Integer.valueOf(constant, radix);
return result;
可以看到,decode 方法首先对正负号和进制符号进行识别判断,最后将剩下的纯数值部分和得到的进制数值调用静态工厂方法 valueOf(string, int) 构造 Integer 对象。
4.4. valueOf 静态方法
Integer 类支持整型和字符串型参数的工厂方法,其中字符串型的工厂方法支持指定进制,并且会先使用 parseInt 方法解析出原始 int 数值,再通过 valueOf (int) 方法构造 Integer 对象。parseInt 方法就是遍历字符串并使用进制值加权累加计算了。最值得注意的是 int 参数的 valueOf 方法,它体现了 Integer 类的缓存策略,后面单独讲。
public static Integer valueOf(String s, int radix) throws NumberFormatException {
return Integer.valueOf(parseInt(s,radix));
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
4.4. getInteger 方法
该方法返回 string 参数指定的系统属性值。支持指定默认值(通过第二个参数),若该属性不存在或者不是 int 类型,则返回默认值
public static Integer getInteger(String nm) {
return getInteger(nm, null);
public static Integer getInteger(String nm, int val) {
Integer result = getInteger(nm, null);
return (result == null) ? Integer.valueOf(val) : result;
public static Integer getInteger(String nm, Integer val) {
String v = null;
try {
v = System.getProperty(nm);
} catch (IllegalArgumentException | NullPointerException e) {
if (v != null) {
try {
return Integer.decode(v);
} catch (NumberFormatException e) {
return val;
4.5. hashCode() 方法
Integer 的 hashCode() 值就是它所保存的 int 型值。
* Returns a hash code for this {@code Integer}.
* @return a hash code value for this object, equal to the
* primitive {@code int} value represented by this
* {@code Integer} object.
@Override
public int hashCode() {
return Integer.hashCode(value);
* Returns a hash code for a {@code int} value; compatible with
* {@code Integer.hashCode()}.
* @param value the value to hash
* @since 1.8
* @return a hash code value for a {@code int} value.
public static int hashCode(int value) {
return value;
4.6. equals(Integer) 方法
Integer 的 equals 方法比较的就是保存的 int 型值是否相等。很显然,hashCode 和 equals 方法遵循散列的常规约定。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
return false;
5. Integer 的缓存机制
前面学习 Boolean 类保存两个对 true 和 false 值对象的静态引用,使用 valueOf 构造对象时会始终返回其一。Integer 类也同样使用了这种缓存机制。上文中提到了静态工厂方法 valueOf(int) 使用了缓存策略,代码中使用了 IntegerCache 类,那么我们就来看看该类源码,这是 Integer 类的一个内部类,专门用于处理 Integer 缓存机制:
可以看出,该类是私有内部类,开发者不可改变和初始化。该类通过静态代码块在类加载的时候,循环创建 Integer 缓存对象,并创建索引表进行引用,需要时使用索引表快速获取。缓存值范围最小是 -128,最大默认是 127(可以使用虚拟机参数指定,虚拟机默认无该参数)。缓存对象值和所在索引表位置偏移量即是 127。
再回头看看 valueOf(int) 方法:当需要构造的 Integer 对象值在缓存范围之内时,就从索引表查找缓存对象直接返回,否则构造新的对象返回。所以大家在开发中需要构建 Integer 对象时,推荐使用静态工厂方法,少用 new 以节省开支。
6. 总结
6.1. Integer 是对 int 型的封装数据类型,能表示的范围是 -231 ~ 231-1 的所有整数;
6.2. Integer 的 hashCode 值就是它所保存的 int 型值;
6.3. Integer 提供了很多实用方法:min、max、sum、转换成二/八/十六进制的字符串表示等;
6.4. Integer 使用了对象缓存机制,默认范围是 -128 ~ 127 ,推荐使用静态工厂方法 valueOf 获取对象实例,而不是 new,因为 valueOf 使用缓存,而 new 一定会创建新的对象分配新的内存空间;
Integer 缓存机制验证:https://www.cnblogs.com/coding-one/p/11389880.html