【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/130730986
出自【进步*于辰的博客】
其实我的【Java-API】专栏内的博文对大家来说意义是不大的。因为暂且没有源码讲解,而且需要看Java-API,直接看Java-API文档就行了,也不用看博文。所以呢,这篇博文主要是写给我自己看的,也就是Java-API笔记。
因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。
此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。
实现注意事项:“bit twiddling()
”方法(如 highestOneBit() 和 numberOfTrailingZeros())的实现基于 Henry S. Warren, Jr.撰写的 《Hacker’s Delight》(Addison Wesley, 2002)中的一些有关材料。
从以下版本开始:
JDK1.0
另请参见:
序列化表格
引用博文【mysql初级锦集】的1.1项中的int类型数据范围计算通式:
注:int类型占4个字节。可为负值,故对应32位有符号二进制。
保持 int 类型的最大值的常量可取的值为 231-1。
说明:
先看源码。
最大值即为最大正数,对应的32位二进制为:0111...(31个1)
,则转为十进制的计算方法为:230 + 229 + … + 21 + 20,这么长的算术运算难道一个个加?当然不是。
将0111...(31个1)
进行+1
会如何?得:1000(31个0)
(注意:这里+1
需要进位)。尽管此二进制对应的是负数,但我可以将其看作是无符号二进制进行计算,其值为:231。
因此,最大值为 231 - 1。
保持 int 类型的最小值的常量可取的值为 -231。
说明:
先看源码。
根据计算通式,可计算出int类型数据范围是:-2(8*4-1) ~ 2(8*4-1) - 1,即:-231 ~ 231 - 1。
这样就已经可以得到int类型的最大值和最小值,那上文中我的阐述岂不多余?
是这样,例如:0111 1111
是127,1000 0000
是128。128 = 127 + 1
等同于1000 0000 = 0111 1111 + 0000 0001
。这个“+1
进位”的细节,我之前是没注意到的。因此,阐述出来留个印象。
以二进制补码形式表示 int 值的位数。
说明:
看源码。
何为“补码”?后续补充。
static Class TYPE
表示基本类型 int 的 Class 实例。
说明:
看源码。
进入getPrimitiveClass()
。
可见,此方法由native
修饰,无法阅读源码。
不过,根据getPrimitiveClass()
的实参"int"
,我猜测此方法的作用是返回指定类型的Class对象
。实参为"int"
,则返回的是int.class
。
测试:
Class cz1 = Integer.TYPE;
Class cz2 = Integer.class;
Class cz3 = int.class;
sout cz1 == cz2;// 打印:false
sout cz1 == cz3;// 打印:true
从打印结果可判断,我的猜测正确。
因此,Integer.TYPE
是包装类Integer
所对应的基本数据类型int
的Class对象,即int.class
。
构造一个新分配的 Integer 对象,它表示指定的 int 值。
构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
说明:
看源码。
几乎所有数值型包装类都有这个构造方法,且底层都如此。
返回指定 int 值的二进制补码表示形式的 1 位的数量。
示例:
int a = 1;// 二进制:0000...0001(31个0)
int b = 10;// 二进制:0000...1010(30个0)
int c = 127;// 二进制:0000...0111 1111(25个0)
sout Integer.bitCount(a);// 打印:1
sout Integer.bitCount(b);// 打印:2
sout Integer.bitCount(c);// 打印:7
以 byte 类型返回该 Integer 的值。
说明:
看源码。
在数字上比较两个 Integer 对象。
说明:
先看源码。
进入compare(a, b)
。
其底层是三目运算符。
将 String 解码为 Integer。(暂未可知)
以 double 类型返回该 Integer 的值。
说明:
先看源码。
就是“强转”。不过,int → double
是隐式转换。因此,我不太明白此方法何意。
以 float 类型返回该 Integer 的值。
说明:
先看源码。
与第5项类似。
确定具有指定名称的系统属性的整数值。
说明:
先看源码。
底层调用了第10项。第2个形参null
作为无值时返回值。
确定具有指定名称的系统属性的整数值。
说明:
先看源码。
底层调用了第10项。第2个形参null
的作用与上1项相同。关于Integer.valueOf()
后续补充。
System.getProperty()
用于获取系统属性,详述请查阅博文【Java-API简析_java.lang.System类(基于 Latest JDK)(浅析源码)】的第2.8项;Integer.decode()
作用是解码,即第4项,其作用大家暂且先理解为String → int
。返回此 Integer 的哈希码。(后续补充)
说明:
看源码。
返回具有至多单个 1 位的 int 值,在指定的 int 值中最高位(最左边)的 1 位的位置。(暂未可知)
以 int 类型返回该 Integer 的值。
说明:
适用类型范围:int、long。
返回具有至多单个 1 位的 int 值,在指定的 int 值中最低位(最右边)的 1 位的位置。
说明:
先看源码。
尽管源码看似很简单,但我经过多次推算和测试,仍然没有理解其规律和用意。
测试示例:
1 & -1 → 0000 0001 & 1111 1111 = 0000 0001 → 1;
2 & -2 → 0000 0010 & 1111 1110 = 0000 0010 → 2;
3 & -3 → 0000 0011 & 1111 1101 → 0000 0001 → 1;
4 & -4 → 0000 0100 & 1111 1100 = 0000 0100 → 4。
推荐一篇博文【关于对【8位二进制的十进制整数表示范围以及常见位运算符】的理解与简述】,里面阐述了如何换算负数的二进制,或许大家用得上。
在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量。(暂未可知)
返回指定的 int 值的二进制补码表示形式中最低(“最右”)的为 1 的位后面的零位个数。(暂未可知)
将字符串参数作为有符号的十进制整数进行分析。
本文持续更新中。。。