当前位置: 首页 > 图灵资讯 > 技术篇> 谈谈你对基本类型与包装类型的理解

谈谈你对基本类型与包装类型的理解

来源:图灵教育
时间:2023-09-05 11:54:55

面试官:兄弟,说说基本类型和包装类型的区别。 (qq.com)

面试官:你知道包装缓存机制吗? (qq.com)

1、包装类型可以是null,基本类型不适中

这使得包装类型可以应用于POJO,而基本类型则不好。

POJO:Plain Ordinary Java Object,简单无规则 Java 对象只有属性字段和 setter 和 getter 方法。

和 POJO 类似地,还有数据传输对象 DTO(Data Transfer Object,一般指显示层与服务层之间的数据传输对象)、视图对象 VO(View Object,封装页面上的数据)、持久化对象 PO(Persistant Object,它可以被视为与数据库中的表映射 Java 对象)。

那为什么 POJO 必须使用包装类型的属性?

数据库的查询结果可能是 null,如果使用基本类型,应自动拆箱(将包装类型转换为基本类型,例如将包装类型转换为基本类型) Integer 对象转换成 int 价值),会被抛出 NullPointerException 的异常。

2、包装类型可用于泛型,基本类型不适中

基本类型不能用于泛型,因为在使用基本类型时会编译错误。

List<int> list = new ArrayList<>(); // 提示 Syntax error, insert "Dimensions" to complete ReferenceTypeList<Integer> list = new ArrayList<>();

为什么?因为泛型在编译过程中会擦除类型,最后只保留原型,而原型只能是 Object 类型及其子类-基本类型是特例。

3、基本类型比包装类型更高效

直接存储在堆栈中的基本类型的具体值,而包装类型则存储在堆栈中的参考。

alt

与基本类型相比,包装类型占用更多的内存空间。

4、存储位置

基本数据类型的局部变量存储在Java虚拟机栈的局部变量表中,基本数据类型的成员变量存储在Java虚拟机堆中。

包装类型属于对象类型,几乎所有的对象案例都存储在堆中。

追问:JVM静态成员变量(static修改)在哪里?

static 关键字详解 (qq.com)

被static修改的成员属于类,由类中的所有对象共享。

static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区的方法区。

问:你知道自动装箱和自动拆箱吗?

既然有基本类型和包装类型,有时必须在它们之间转换。

将基本类型转换为包装类型的过程称为包装(boxing)。

相反,将包装类型转换为基本类型的过程称为拆箱(unboxing)。

在 Java SE5 以前开发人员要手动装拆箱,比如

Integer chenmo = new Integer(10);  // int手动装箱 wanger = chenmo.intValue();    // 手动拆箱

Java SE5 为减少开发人员的工作,提供了自动装箱和自动拆箱的功能。

Integer chenmo  = 10;  // int自动装箱 wanger = chenmo;   // 自动拆箱
问:你知道包装类型的缓存机制吗?

将包装缓存机制引入JDK5,有助于节省内存。

Byte、Short、Integer、这四种包装类型的Long默认创建了相应类型的[-128、127]缓存数据;

Character在[0,127]范围内创建了数值缓存数据;

Boolean直接返回True or False

浮点类型的包装类型Float,Double常量池技术尚未实现。(