基本数据类型
为什么需要
由于基本数据类型不是对象,所以java并不是纯面向对象的语言,好处是效率较高(全部包装为对象效率较低)。Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
有哪些
| 基本类型 | 包装器类 |
|---|---|
| boolean | Boolean |
| int | Integer |
| byte | Byte |
| short | Short |
| long | Long |
| float | Float |
| char | Character |
| double | Double |
Number是所有数字包装类的父类
自动装箱、自动拆箱(编译器行为)
自动装箱:可以将基础数据类型包装成对应的包装类
Integer i = 10000; // 编译器会改为new Integer(10000)
自动拆箱:可以将包装类转为对应的基础数据类型
int i = new Integer(1000);//编译器会修改为 int i = new Integer(1000).intValue();
自动拆箱时如果包装类是null,那么会抛出NPE
Integer.valueOf
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
调用Integer.valueOf时-128~127的对象被缓存起来。所以在此访问内的Integer对象使用==和equals结果是一样的。如果Integer的值一致,且在此范围内,因为是同一个对象,所以==返回true;但此访问之外的对象==比较的是内存地址,值相同,也是返回false。
本文深入探讨Java中基本数据类型与包装类的概念,解释为何基本类型不被视为对象,以及包装类如何使基本类型具备对象特性。文章还介绍了自动装箱与拆箱的过程,以及Integer缓存机制。
565

被折叠的 条评论
为什么被折叠?



