Java 虽然是面向对象的编程语言,但是依旧保留了一些原始数据类型,同时为了兼容java面向对象的特性,每种原始数据类型,都有对应的包装类型。

原始数据类型:boolean、char、byte、short、int、long、float、double
包装类型:Boolean、Character、Byte、Short、Integer、Long、Float、Double

包装类型是对原始数据类型的一种封装,包含对原始类型数据的存储、基本操作以及两种类型直接的转换。Java5中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java可以根据上下文,自动进行转换,极大的简化了相关的编程。

Integer就是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、类型转换等。

关于Integer的值缓存,是Java5中的一个改进。构造一个Integer对象的正常操作应该是直接使用Integer的构造器,new一个对象出来。但是根据具体实践,大部分的操作都较为集中在有限且较小的数值范围。因此,Java5中新增了静态工厂方法valueOf,在调用它的时候会利用一个缓存机制。缓存的数值范围为[-128, 127]

知识点解读

如何理解自动装箱、拆箱

自动装箱实际上算是一种语法糖。Java会自动进行转换,保证不同的写法在运行时是等价的,他们发生在编译阶段,也就是生成的字节码是一致的。

语法糖虽好,用时小心 建议避免无意的装箱、拆线行为(创建100万个java对象和100万个整数的消耗不是一个数量级的,不管是内存使用还是处理速度,光是对象头的空间占用就已经是数量级的差距了。)


评论