Integer类继承Number类,实现Comparable接口。Integer类被修饰为final,所以其不可被继承。
字段
MIN_VALUE
最小值,@Native表示该字段可以从本地代码引用。
@Native public static final int MIN_VALUE = 0x80000000;
MAX_VALUE
最大值。
@Native public static final int MAX_VALUE = 0x7fffffff;
TYPE
类原始类型int的类实例。@SuppressWarnings(“unchecked”)表示该字段应该抑制unchecked的编译器警告。
@SuppressWarnings(\"unchecked\")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass(\"int\");
digits
所有可以表示为字符的数字。此变量是默认修饰符 ,只能在包内访问。
final static char[] digits = {
\'0\' , \'1\' , \'2\' , \'3\' , \'4\' , \'5\' ,
\'6\' , \'7\' , \'8\' , \'9\' , \'a\' , \'b\' ,
\'c\' , \'d\' , \'e\' , \'f\' , \'g\' , \'h\' ,
\'i\' , \'j\' , \'k\' , \'l\' , \'m\' , \'n\' ,
\'o\' , \'p\' , \'q\' , \'r\' , \'s\' , \'t\' ,
\'u\' , \'v\' , \'w\' , \'x\' , \'y\' , \'z\'
};
DigitTens
处理大的数,代表十位。
final static char [] DigitTens = {
\'0\', \'0\', \'0\', \'0\', \'0\', \'0\', \'0\', \'0\', \'0\', \'0\',
\'1\', \'1\', \'1\', \'1\', \'1\', \'1\', \'1\', \'1\', \'1\', \'1\',
\'2\', \'2\', \'2\', \'2\', \'2\', \'2\', \'2\', \'2\', \'2\', \'2\',
\'3\', \'3\', \'3\', \'3\', \'3\', \'3\', \'3\', \'3\', \'3\', \'3\',
\'4\', \'4\', \'4\', \'4\', \'4\', \'4\', \'4\', \'4\', \'4\', \'4\',
\'5\', \'5\', \'5\', \'5\', \'5\', \'5\', \'5\', \'5\', \'5\', \'5\',
\'6\', \'6\', \'6\', \'6\', \'6\', \'6\', \'6\', \'6\', \'6\', \'6\',
\'7\', \'7\', \'7\', \'7\', \'7\', \'7\', \'7\', \'7\', \'7\', \'7\',
\'8\', \'8\', \'8\', \'8\', \'8\', \'8\', \'8\', \'8\', \'8\', \'8\',
\'9\', \'9\', \'9\', \'9\', \'9\', \'9\', \'9\', \'9\', \'9\', \'9\',
} ;
DigitOnes
处理大的数,代表个位。
final static char [] DigitOnes = {
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\',
} ;
sizeTable
为了得到十进制的位数。
final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };
value
Integer的值,value被定义为final,即常量,值不可更改。
private final int value;
SIZE
用于表示二进制补码二进制形式的 int值的位数。
@Native public static final int SIZE = 32;
BYTES
用于表示二进制补码二进制形式的 int值的字节数。
public static final int BYTES = SIZE / Byte.SIZE;
serialVersionUID
Integer的序列化版本号。
@Native private static final long serialVersionUID = 1360826667806852920L;
构造方法
Integer(int value)
public Integer(int value) {
this.value = value;
}
Integer(String s)
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
方法
toString(int i, int radix)
i是要转换为字符串的整数,radix是在字符串表示中使用的基数,返回基数radix表示的i的字符串。
public static String toString(int i, int radix) {
// 如果radix不在合法的基数范围之内,使用10作为基数,范围2~36。
if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
radix = 10;
// 如果基数是10,使用更加快速的转换方法。
if (radix == 10) {
return toString(i);
}
// Integer转化为以2为基数的字符串最多需要32位,并且有可能需要一位来表示\'-\'字符。
char buf[] = new char[33];
boolean negative =(i < 0);
// buf[]下标。
int charPos = 32;
// 如果i是非负数,将i变为负数。
if (!negative) {
i = -i;
}
// 计算i转换为以radix为基数的值,从后向前遍历buf[],并放入bug中。
// 转化为负数来操作是因为正数取不到128。
while (i <= -radix) {
buf[charPos--] = digits[-(i % radix)];
i = i / radix;
}
buf[charPos] = digits[-i];
// 如果是负数,加上字符\'-\'。
if (negative) {
buf[--charPos] = \'-\';
}
// 返回buf[]中有值的部分的字符串。
return new String(buf, charPos, (33 - charPos));
}
toUnsignedString(int i, int radix)
i是要转换为字符串的整数,radix是在字符串表示中使用的基数,返回无符号整数i以基数radix表示的字符串。具体参考Long的源码阅读。
public static String toUnsignedString(int i, int radix) {
return Long.toUnsignedString(toUnsignedLong(i), radix);
}
toHexString(int i)
i是要转换为字符串的整数,返回无符号整数i以基数16表示的字符串。
public static String toHexString(int i) {
return toUnsignedString0(i, 4);
}
toOctalString(int i)
i是要转换为字符串的整数,返回无符号整数i以基数8表示的字符串。
public static String toOctalString(int i) {
return toUnsignedString0(i, 3);
}
toBinaryString(int i)
i是要转换为字符串的整数,返回无符号整数i以基数2表示的字符串。
public static String toBinaryString(int i) {
return toUnsignedString0(i, 1);
}
toUnsignedString0(int val, int shift)
将val转换为以shift表示的基数的字符串,val是要转换的整数,shift是log2x的值,x是进制数。
private static String toUnsignedString0(int val, int shift) {
// assert shift > 0 && shift <=5 : \"Illegal shift value\";
// 得到val的二进制的有意义的位数,例如126对应的msg是7,-126对应的mag是32。
int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
// msg位数转换为2^shift进制的位数
int chars = Math.max(((mag + (shift - 1)) / shift), 1);
char[] buf = new char[chars];
// 进行转换
formatUnsignedInt(val, shift, buf, 0, chars);
// Use special constructor which takes over \"buf\".
return new String(buf, true);
}
formatUnsignedInt(int val, int shift, char[] buf, int offset, int len)
val是要格式化的整数,shift是要格式化的基数的代表,4代表十六进制,3代表八进制,1代表二进制,buf是要写入的字符数组,offset是buf中开始的位置,len是要写入buf的长度,返回buf中最低位的位置。
static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
int charPos = len;
int radix = 1 << shift;
int mask = radix - 1;
// 此过程相当于从右向左遍历val的二进制,每shift位转换为十进制对应radix进制的一位数。
// 就如同二进制转换为十六进制时,每四位换算成十进制就是十六进制的一位;二进制转换为八进制时,每三位换算成十进制就是八进制的一位。
do {
buf[offset + --charPos] = Integer.digits[val & mask];
val >>>= shift;
} while (val != 0 && charPos > 0);
return charPos;
}
toString(int i)
将i转换为string类型,返回String类型的i。
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return \"-2147483648\";
// 负数有一个符号位
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
// 将每一位转换为字符
getChars(i, size, buf);
return new String(buf, true);
}
toUnsignedString(int i)
public static String toUnsignedString(int i) {
return Long.toString(toUnsignedLong(i));
}
getChars(int i, int index, char[] buf)
将整数i一个字符一个字符地写入buf,index是buf的起始位置。
static void getChars(int i, int index, char[] buf) {
int q, r;
// buf的下标
int charPos = index;
// 正负数标志
char sign = 0;
// 如果是负数,将sign赋值为\'-\'
if (i < 0) {
sign = \'-\';
i = -i;
}
// Generate two digits per iteration
// 以中间位数为界限,大的数使用一种算法,小的数使用一种算法
// 2^16=65536
while (i >= 65536) {
q = i / 100;
// really: r = i - (q * 100);
// (q << 6) + (q << 5) + (q << 2) = q * (2^6 + 2^5 + 2^2) = q * 100
r = i - ((q << 6) + (q << 5) + (q << 2));
i = q;
buf [--charPos] = DigitOnes[r];
buf [--charPos] = DigitTens[r];
}
// Fall thru to fast mode for smaller numbers
// assert(i <= 65536, i);
for (;;) {
// 为什么不使用i/10呢???因为效率方面乘法优于除法,位运算优于乘法
// 2^19=524288
// 2^15<52429<2^16
// 为什么是16+3呢???为了精度
q = (i * 52429) >>> (16+3);
r = i - ((q << 3) + (q << 1)); // r = i-(q*10) ...
buf [--charPos] = digits [r];
i = q;
if (i == 0) break;
}
// 符号
if (sign != 0) {
buf [--charPos] = sign;
}
}
stringSize(int x)
获取整型x转为string之后的字符串长度。
static int stringSize(int x) {
for (int i=0; ; i++)
if (x <= sizeTable[i])
return i+1;
}
parseInt(String s, int radix)
将字符串s以radix为基数转换为有符号整型数。如果发生以下任何一种情况,则抛出类型NumberFormatException的异常:
- 第一个参数是null或是长度为零的字符串。
- 基数小于
Character.MIN_RADIX或大于Character.MAX_RADIX。 - 字符串的任何字符不是指定基数的数字,除了第一个字符可能是减号或加号,前提是字符串长度大于1.
- 由字符串表示的值不是int类型的值。
public static int parseInt(String s, int radix) throws NumberFormatException {
if (s == null) {
throw new NumberFormatException(\"null\");
}
if (radix < Character.MIN_RADIX) {
throw new NumberFormatException(\"radix \" + radix + \" less than Character.MIN_RADIX\");
}
if (radix > Character.MAX_RADIX) {
throw new NumberFormatException(\"radix \" + radix + \" greater than Character.MAX_RADIX\");
}
int result = 0;
boolean negative = false;
int i = 0, len = s.length();
int limit = -Integer.MAX_VALUE;
int multmin;
int digit;
if (len > 0) {
char firstChar = s.charAt(0);
// 首先检查第一个字符是否是符号
if (firstChar <
继续阅读与本文标签相同的文章
DL应用:query生成和query推荐
OCR技术浅析
-
开发者必读 · 周报 | 002期
2026-05-19栏目: 教程
-
斩获2019中国金融科技创新大赛金奖,蚂蚁金服mPaaS助力打造超级App生态
2026-05-19栏目: 教程
-
有呀!互联网icp许可证除申请以外有转让的吗?飞起
2026-05-19栏目: 教程
-
Apache Zepplin使用Hive Interpreter查询
2026-05-19栏目: 教程
-
大宗货运如何实现“重去重回”?
2026-05-19栏目: 教程
