您的位置:首页 > 编程语言 > Java开发

JDK-Integer源码解读

2018-01-06 15:03 363 查看
通过类的定义可以看出

public final class Integer extends Number implements Comparable<Integer>


不能被继承

实现Comparable接口,用compareTo进行比较并且Integer对象只能和Integer类型的对象进行比较,不能和其他类型比较

继承了Number类,所以该类可以调用longValue、floatValue、doubleValue等系列方法返回对应的类型的值

属性

私有属性

value

serialVersionUID

公有属性

publis static fianl 可以直接使用

方法

当Integer被加载时,就新建了-128到127的所有数字并存放在Integer数组cache中

当调用valueOf方法(包括后面会提到的重载的参数类型包含String的valueOf方法)时,如果参数的值在-127到128之间,则直接从缓存中返回一个已经存在的对象。如果参数的值不在这个范围内,则new一个Integer对象返回

String->int调用栈

getInteger(String nm) ---> getInteger(nm, null);--->Integer.decode()--->Integer.valueOf()--->parseInt()


getInteger

获取确定具有指定名称的系统属性的整数值

decode

该方法的作用是将 String 解码为 Integer。接受十进制、十六进制和八进制数字

根据要解码的 String(mn)的形式转成不同进制的数字。 mn由三部分组成:符号、基数说明符和字符序列。 —0X123中-是符号位,0X是基数说明符(0表示八进制,0x,0X,#表示十六进制,什么都不写则表示十进制),123是数字字符序列。

总结

parseInt方法返回的是基本类型int

其他的方法返回的是Integer

valueOf(String)方法会调用valueOf(int)方法。借助缓存

如果需要一个对象,那么建议使用valueOf(),因为该方法可以借助缓存带来的好处。

如果和进制有关,那么就是用decode方法。

如果是从系统配置中取值,那么就是用getInteger

int转为String

toString()

局部性原理之空间局部性:sizeTable为数组,存储在相邻的位置,cpu一次加载一个块数据数据到cache中(多个数组数据),此后访问sizeTable 不需要访问内存。

基于范围的查找,是很实用的设计技术

移位的效率比直接乘除的效率要高

乘法的效率比除法的效率要高

compareTo

return (x < y) ? -1 : ((x == y) ? 0 : 1);


参考文章

jdk-Integer

java成神之路-Integer源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: