Java-API简析_java.lang.Integer类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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】。

文章目录

  • 1、概述
  • 2、字段摘要
    • 2.1 static int MAX_VALUE
    • 2.2 static int MIN_VALUE
    • 2.3 static int SIZE
    • 2.4 `static Class TYPE `
  • 3、构造方法摘要
    • 3.1 int value
    • 3.2 String s
  • 4、方法摘要
    • 4.1 static int bitCount(int i)
    • 4.2 byte byteValue()
    • 4.3 int compareTo(Integer anotherInteger)
    • 4.4 static Integer decode(String nm)
    • 4.5 double doubleValue()
    • 4.6 boolean equals(Object obj)
    • 4.7 float floatValue()
    • 4.8 static Integer getInteger(String nm)
    • 4.9 static Integer getInteger(String nm, int val)
    • 4.10 static Integer getInteger(String nm, Integer val)
    • 4.11 int hashCode()
    • 4.12 static int highestOneBit(int i)
    • 4.13 int intValue()
    • 4.14 static int lowestOneBit(int i)
    • 4.15 static int numberOfLeadingZeros(int i)
    • 4.16 static int numberOfTrailingZeros(int i)
    • 4.17 static int parseInt(String s)

1、概述

Java-API简析_java.lang.Integer类(基于 Latest JDK)(浅析源码)_第1张图片
Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

实现注意事项:“bit twiddling()”方法(如 highestOneBit() 和 numberOfTrailingZeros())的实现基于 Henry S. Warren, Jr.撰写的 《Hacker’s Delight》(Addison Wesley, 2002)中的一些有关材料。

从以下版本开始:
JDK1.0
另请参见:
序列化表格

2、字段摘要

引用博文【mysql初级锦集】的1.1项中的int类型数据范围计算通式:

在这里插入图片描述

注:int类型占4个字节。可为负值,故对应32位有符号二进制。

2.1 static int MAX_VALUE

保持 int 类型的最大值的常量可取的值为 231-1。
说明:
先看源码。
在这里插入图片描述

最大值即为最大正数,对应的32位二进制为:0111...(31个1),则转为十进制的计算方法为:230 + 229 + … + 21 + 20,这么长的算术运算难道一个个加?当然不是。
0111...(31个1)进行+1会如何?得:1000(31个0)(注意:这里+1需要进位)。尽管此二进制对应的是负数,但我可以将其看作是无符号二进制进行计算,其值为:231
因此,最大值为 231 - 1

2.2 static int MIN_VALUE

保持 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进位”的细节,我之前是没注意到的。因此,阐述出来留个印象。

2.3 static int SIZE

以二进制补码形式表示 int 值的位数。
说明:
看源码。
在这里插入图片描述
何为“补码”?后续补充。

2.4 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

3、构造方法摘要

3.1 int value

构造一个新分配的 Integer 对象,它表示指定的 int 值。

3.2 String s

构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
说明:
看源码。
在这里插入图片描述
几乎所有数值型包装类都有这个构造方法,且底层都如此。

4、方法摘要

4.1 static int bitCount(int i)

返回指定 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

4.2 byte byteValue()

以 byte 类型返回该 Integer 的值。
说明:
看源码。
在这里插入图片描述

4.3 int compareTo(Integer anotherInteger)

在数字上比较两个 Integer 对象。
说明:
先看源码。
在这里插入图片描述
进入compare(a, b)
在这里插入图片描述
其底层是三目运算符

4.4 static Integer decode(String nm)

将 String 解码为 Integer。(暂未可知)

4.5 double doubleValue()

以 double 类型返回该 Integer 的值。
说明:
先看源码。
在这里插入图片描述
就是“强转”。不过,int → double隐式转换。因此,我不太明白此方法何意。

4.6 boolean equals(Object obj)

比较此对象与指定对象。(后续补充)
说明:
看源码。
Java-API简析_java.lang.Integer类(基于 Latest JDK)(浅析源码)_第2张图片

4.7 float floatValue()

以 float 类型返回该 Integer 的值。
说明:
先看源码。
在这里插入图片描述
与第5项类似。

4.8 static Integer getInteger(String nm)

确定具有指定名称的系统属性的整数值。
说明:
先看源码。
在这里插入图片描述
底层调用了第10项。第2个形参null作为无值时返回值。

4.9 static Integer getInteger(String nm, int val)

确定具有指定名称的系统属性的整数值。
说明:
先看源码。
在这里插入图片描述
底层调用了第10项。第2个形参null的作用与上1项相同。关于Integer.valueOf()后续补充。

4.10 static Integer getInteger(String nm, Integer val)

确定具有指定名称的系统属性的整数值。
说明:
先看源码。
Java-API简析_java.lang.Integer类(基于 Latest JDK)(浅析源码)_第3张图片

  1. System.getProperty()用于获取系统属性,详述请查阅博文【Java-API简析_java.lang.System类(基于 Latest JDK)(浅析源码)】的第2.8项;
  2. Integer.decode()作用是解码,即第4项,其作用大家暂且先理解为String → int

4.11 int hashCode()

返回此 Integer 的哈希码。(后续补充)
说明:
看源码。
在这里插入图片描述

4.12 static int highestOneBit(int i)

返回具有至多单个 1 位的 int 值,在指定的 int 值中最高位(最左边)的 1 位的位置。(暂未可知)

4.13 int intValue()

以 int 类型返回该 Integer 的值。
说明:
适用类型范围:int、long。

4.14 static int lowestOneBit(int i)

返回具有至多单个 1 位的 int 值,在指定的 int 值中最低位(最右边)的 1 位的位置。
说明:
先看源码。
在这里插入图片描述
尽管源码看似很简单,但我经过多次推算和测试,仍然没有理解其规律和用意。
测试示例:

1 & -10000 0001 & 1111 1111 = 0000 000112 & -20000 0010 & 1111 1110 = 0000 001023 & -30000 0011 & 1111 11010000 000114 & -40000 0100 & 1111 1100 = 0000 01004

推荐一篇博文【关于对【8位二进制的十进制整数表示范围以及常见位运算符】的理解与简述】,里面阐述了如何换算负数的二进制,或许大家用得上。

4.15 static int numberOfLeadingZeros(int i)

在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量。(暂未可知)

4.16 static int numberOfTrailingZeros(int i)

返回指定的 int 值的二进制补码表示形式中最低(“最右”)的为 1 的位后面的零位个数。(暂未可知)

4.17 static int parseInt(String s)

将字符串参数作为有符号的十进制整数进行分析。

本文持续更新中。。。

你可能感兴趣的:(Java-API,java,API解析)