JDK源码笔记01 Integer
2021/6/27 1:14:08
本文主要是介绍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
这篇关于JDK源码笔记01 Integer的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26手写消息中间件:从零开始的指南
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解