一、概述

Integer是对基本数据类型int的一个包装,类定义如下:

public final class Integer extends Number implements Comparable<Integer> 

通过属性MAX_VALUE和MIN_VALUE定义了范围是:-2^31到2^31 -1.。

二、主要方法

1.toString(int i, int radix)

第二个参数的进制,默认是10进制,进制的范围是2-36进制之间,如果传入的参数超出范围,就设置为10进制。

2.toUnsignedString(int i, int radix)

无符号的字符串,调用了Long的toUnsignedString方法来实现。

3.toHexString、toOctalString、toBinaryString

无符号的2/8/16进制数,如果参数为负,则无符号整数值为参数加2^32。都是调用Integer的私有方法toUnsignedString0和方法formatUnsignedInt来实现的,方法如下:

    private static String toUnsignedString0(int val, int shift) {// assert shift > 0 && shift <=5 : "Illegal shift value";int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);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);}

4.parseInt(String s, int radix)、parseInt(String s)

将一个字符串转换为int类型,传入正数负数都可以进行转换,radix不传默认是10进制。

5.hashCode:就是本身

6.public static Integer decode(String nm)

String解码为Integer 。 接受以下语法给出的十进制,十六进制和八进制数:

  • DecimalNumeral
  • 0x HexDigits
  • 0X HexDigits
  • # HexDigits
  • 0 OctalDigits
  • -
  • +
    public static Integer decode(String nm) throws NumberFormatException {int radix = 10;int index = 0;boolean negative = false;Integer result;if (nm.length() == 0)throw new NumberFormatException("Zero length string");char firstChar = nm.charAt(0);// Handle sign, if presentif (firstChar == '-') {negative = true;index++;} else if (firstChar == '+')index++;// Handle radix specifier, if presentif (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {index += 2;radix = 16;}else if (nm.startsWith("#", index)) {index ++;radix = 16;}else if (nm.startsWith("0", index) && nm.length() > 1 + index) {index ++;radix = 8;}if (nm.startsWith("-", index) || nm.startsWith("+", index))throw new NumberFormatException("Sign character in wrong position");try {result = Integer.valueOf(nm.substring(index), radix);result = negative ? Integer.valueOf(-result.intValue()) : result;} catch (NumberFormatException e) {// If number is Integer.MIN_VALUE, we'll end up here. The next line// handles this case, and causes any genuine format error to be// rethrown.String constant = negative ? ("-" + nm.substring(index)): nm.substring(index);result = Integer.valueOf(constant, radix);}return result;}

7.divideUnsigned、remainderUnsigned

无符号商、无符号余数

8.highestOneBit、lowestOneBit

这个函数调用。使用的第一感觉就是这个函数是干什么用的,通过查看文档得知,这个函数的作用是取 i 这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果。

用人话说:返回最高位为1, 其它位为0的数

  • 如果一个数是0, 则返回0;
  • 如果是负数, 则返回 -2147483648:【1000,0000,0000,0000,0000,0000,0000,0000】(二進制表示的數);
  • 如果是正数, 返回的则是跟它最靠近的比它小的2的N次方

比如 17:

二进制是【0000,0000,0000,0000,0000,0000,0001,0001】

highestOneBit(17)返回的是最高位的1个1, 其它全是0 的二进制數:【0000,0000,0000,0000,0000,0000,0001,0000】,其实就是16。

三、特殊之处

1.静态私有类private static class IntegerCache

-128到127之间的会被缓存,高值可以通过JVM参数java.lang.Integer.IntegerCache.high进行设置。

JDK源码(10)-Integer(用处最多,重点讲解)相关推荐

  1. JDK源码解析 Integer类使用了享元模式

    JDK源码解析 Integer类使用了享元模式. 我们先看下面的例子: public class Demo {public static void main(String[] args) {Integ ...

  2. JDK源码分析-Integer

    Integer是平时开发中最常用的类之一,但是如果没有研究过源码很多特性和坑可能就不知道,下面深入源码来分析一下Integer的设计和实现. Integer: 继承结构: -java.lang.Obj ...

  3. java int类源码,一起学JDK源码 -- Integer类

    Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...

  4. JDK源码学习笔记——Integer

    一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...

  5. JAVA JDK 源码学习

    JAVA JDK 源码学习 ,以1.8为例,按照下面图片顺序依次学习: applet ,awt,beans,io,lang,math,net,nio,rmi,security,sql,text,tim ...

  6. JDK源码研究Jstack,JMap,threaddump,dumpheap的原理

    JDK最新bug和任务领取:https://bugs.openjdk.java.net/projects/JDK/issues 参加OpenJDK社区:https://bugs.openjdk.jav ...

  7. 从JDK源码角度看Long

    概况 Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其 ...

  8. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

  9. jdk源码分析书籍 pdf_如何阅读源码?

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码. 首 ...

  10. JDK源码学习路线~每天学一点~每天进步一点点

    很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起.以下为小编整理的通常所需阅读的源码范围. 标题为包名,后面序号为优先级1-4,优先级递减 1.java.lang 1) Objec ...

最新文章

  1. Premiere Pro CS5软件安装教程
  2. oracle日期格式更新_oracle 日期格式
  3. php mysql 排序规则_php 数组排序以及按照某个字段排序
  4. Java基础--多态
  5. 数据流中的中位数 Find Median from Data Stream
  6. SharePoint Designer中无法显示任何列表
  7. o2o模式主要利用在哪些领域 企业怎么发展o2o模式?
  8. 每天学习10句英语-第七天
  9. 北京集训TEST12——PA( Mortal Kombat)
  10. 计算机一级考试有填空题嘛,计算机一级考试填空题
  11. 数据统计并制作韦恩图
  12. python学习笔记3
  13. APP指的是智能手机的第三方应用
  14. 汽车插座的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 布法罗计算机专业怎么样,布法罗大学 University at Buffalo
  16. 公比为无理数的等比数列的近似表示
  17. Hadoop启动错误:WARNING log4j.properties is not found. HADOOP_CONF_DIR may be incomplete
  18. 推荐中的ctr校准方式
  19. KISSY基础篇乄KISSY之IO前奏
  20. 【python】判断闰年

热门文章

  1. webstorm 10.0.4 注册码
  2. linux最小化原则
  3. 外网DNS系统外网访问及邮件系统外网域名访问问题
  4. “Linaro”将推动开源软件新一波开发潮
  5. LeetCode 120. 三角形最小路径和
  6. 机器人加锤石如何放技能q_莫甘娜天克机器人?青蛙完美套路心理博弈,王者辅助E不出来!...
  7. 给键盘上的enter设置事件_Selenium3 + Python3自动化测试系列——鼠标事件和键盘事件...
  8. 自动化运维环境搭建过程
  9. Dubbo源码分析系列-Dubbo的动态编译原理
  10. SpringBoot应用场景启动器