一、定义与包含内容
- 基本类型:Java语言内置的简单数据类型,直接存储数据的值。它们包括boolean(表示真或假)、char(表示单个字符,使用16位Unicode编码)、byte(8位有符号整数)、short(16位有符号整数)、int(32位有符号整数)、long(64位有符号整数)、float(32位单精度浮点数)和double(64位双精度浮点数)。
- 包装类型:为每种基本数据类型提供的类,用于将基本类型封装成对象。这些类包括Boolean、Character、Byte、Short、Integer、Long、Float和Double。
二、性质与特性
- 对象性:基本类型不是对象,因此没有对象的特性,如继承和多态。而包装类型是对象,具有对象的所有特性,如继承自Object类的功能(如toString()、equals()等)。
- 方法与操作:基本类型只包含数据本身,不包含任何方法或操作。包装类型不仅包含数据,还包含了一系列的方法(如类型转换、比较等)和属性。
三、声明与存储
- 声明方式:基本类型直接声明变量并赋值,不需要使用new关键字。而包装类型需要使用new关键字在堆内存中分配内存空间,或者使用自动装箱(JDK 5及以上版本支持)来创建对象。
- 存储位置:基本类型直接将值保存在栈内存中,访问速度较快。包装类型将对象放在堆内存中,通过栈中的引用来调用它们,访问速度相对较慢,并且需要考虑垃圾回收等额外开销。
四、初始值与使用场景
- 初始值:基本类型在声明时如果没有显式赋值,则会被赋予一个默认值(如int的默认值为0,boolean的默认值为false)。包装类型在声明时如果没有显式赋值,则默认值为null,因为它们是引用类型。
- 使用场景:基本类型直接用于数值计算、位运算等场景,效率较高。包装类型主要用于需要对象的地方,如集合(List、Map等)中只能存储对象,因此基本类型需要通过包装类来转换为对象才能存储在集合中。
五、泛型适用性
- 基本类型不能直接用于泛型,因为泛型在编译时会进行类型擦除,而基本类型没有对应的类型信息可以擦除。
- 包装类型可以用作泛型的类型参数,因为它们是对象类型,具有类型信息。
六、传递方式
- 基本类型是值传递,即传递的是变量的副本。
- 包装类是引用传递,即传递的是对象引用的地址值。