JDK源码笔记01 Integer
作者:互联网
something before start
写这个系列博客主要的目的是记录一下学习JDK的过程,一方面方便后面使用,另一方面则是避免草草过去。代码版本是jdk14
顺序大概是:包装类--字符串--集合类--juc并发包--io--网络编程--注解--stream--类加载--反射--文件操作处理类
方法以及子类概览
构造函数
public Integer(int value) //不建议使用,建议使用valueOf
public Integer(String s) //不建议使用,建议使用valueOf
输出字符串
有一些内容比较少的直接在这里用注释说明了:D
toString(int i) 十进制的toString,一次处理两位,相对toString(int i, int radix)性能更好一点点吧,少做了一些除法
toString(int i, int radix)
toStringUTF16(int i, int radix)
toUnsignedString(int i, int radix) 里面调用了Long的方法
toUnsignedString0(int i, int shift) shift是代表radix = 2^shift, 取值(0,5]
toHexString(int i) 返回无符号16进制字符串,里面调用了toUnsignedString0
toOctalString(int i)返回无符号8进制字符串
toBinaryString(int i)返回无符号2进制字符串
getChars(int i, int index, byte[] buf) index就是size,该方法将十进制转换成字节数组存入buf,返回开始位置
解析字符串
public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix)
public static int parseInt(String s, int radix)
public static int parseInt(String s) //十进制
public static int parseUnsignedInt(String s, int radix)
public static int parseUnsignedInt(CharSequence s, int beginIndex, int endIndex, int radix)
public static Integer valueOf(int i)
public static Integer valueOf(String s) //调用parseInt之后传入valueOf(int i)
public static Integer valueOf(String s, int radix) //同上
杂七杂八函数
- hash和equal
哈希值就是value
public static int hashCode(int value) {
return value;
}
equal 就是比较value
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
- getInteger
//获取系统的参数,nm即参数名称,空则返回val
//内部调用了System.getProperty(nm),如果存在,则调用decode转换成Integer返回
public static Integer getInteger(String nm, Integer val)
- decode
将字符串转换成Integer,支持十进制,八进制,十六进制
十六进制:0x
0X
#
八进制:0
加减号:+
-
public static Integer decode(String nm)
//1 取出正负号
//2 通过枚举判断出是什么进制的字符串,通过valueOf获得相应的值
//3 数字和字母部分最终通过parseInt得到
//4 把正负号放回到数字里
- compare
compare
compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
- compareUnsigned
return compare(x + MIN_VALUE, y + MIN_VALUE);
- highestOneBit(int i) 取出最高位
- lowestOneBit(int i) return i & -i; 很妙
- bitCount(int i) 获取1的数目,用的是分治策略 很美,可以参照这个博客 理解一下
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
- rotateLeft(int i, int distance) 向左边循环
- rotateRight
- reverse 每位都翻转,也是分治策略 很美:D
- reverseBytes 翻转字符
- signum 取出符号,返回1 或 -1
方法详解
输出字符串
toString(int i, int radix)
签名:public static String toString(int i, int radix)
功能:返回radix进制的字符串
参数:
i:十进制正整数
radix:基数,若要转换成16进制则为16
问题:
1. 明明用正数一样可以实现,为什么要转换成负数?
因为补码里负数多一位,如果改成正数会有bug
2. 我实现的时候发现StringLatin1这个类用不了,为什么?
傻了,因为他不是public
标签:radix,01,int,源码,static,Integer,public,String 来源: https://www.cnblogs.com/sariseBlog/p/14939628.html