面试回答重点
基本类型 :Java 中有 8 种基本数据类型(int
、long
、float
、double
、char
、byte
、boolean
、short
),它们是直接存储数值的变量,位于栈上(局部变量),性能较高,且不支持 null
。
包装类型 :每个基本类型都有一个对应的包装类型(Integer
、Long
、Float
、Double
、Character
、Byte
、Boolean
、Short
)。包装类型是类,存储在堆中,可以用于面向对象编程,并且支持 null
。
区别总结:
(1)性能区别:
- 基本类型:占用内存小,效率高,适合频繁使用的简单操作。
- 包装类型:因为是对象,涉及内存分配和垃圾回收,性能相对较低。
(2)比较方式不同:
- 基本类型 :比较用
==
,直接比较数值。 - 包装类型 :比较时,
==
比较的是对象的内存地址,而equals()
比较的是对象的值。
(3)默认值不同:
- 基本类型:默认值是 0,false 等。
- 包装类型:默认为 null。
(4)初始化的方式不同:
- 基本类型:直接赋值。
- 包装类型:需要采用 new 的方式创建。
(5)存储方式不同:
- 基本类型:如果是局部变量则保存在栈上面,如果是成员变量则在堆中。
- 包装类型:保存在堆上(成员变量,在不考虑 JIT 优化的栈上分配时,都是随着对象一起保存在堆上的)。
扩展知识
自动装箱与拆箱
Java 是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是 Object类型。
为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型"包装起来",使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
- 装箱:基本类型自动转换为包装类型对象。
- 拆箱:包装类型对象自动转换为基本类型的值。
缓存机制
包装类型中的 Byte
、Short
、Integer
和 Long
对某些范围内的值(例如 Integer
缓存 -128 到 127)会使用对象缓存来提升性能。因此,同一数值的包装类型对象可能是同一个实例。
例如:
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false
基础类型与包装类长度和范围
分类 | 基本数据类型 | 包装类 | 长度 | 表示范围 |
---|---|---|---|---|
布尔型 | boolean | Boolean | / | / |
byte | Byte | 1 字节 | -128 ~ 127 | |
short | Short | 2 字节 | -32768 ~ 32767 | |
整型 | int | Integer | 4 字节 | -2,147,483,648 ~ 2,147,483,647 |
long | Long | 8 字节 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
字符型 | char | Character | 2 字节 | Unicode 字符集中的任何字符 |
浮点型 | float | Float | 4 字节 | 约 -3.4E38 ~ 3.4E38 |
double | Double | 8 字节 | 约 -1.7E308 ~ 1.7E308 |
另外,近期才哥整理出了一个可用于快速刷面试题的小程序,其中收录了常见面试题及其答案,涵盖了基础、并发、JVM、MySQL、Redis、Spring、SpringMVC、SpringBoot、SpringCloud、消息队列等多个类型。可以看下方小程序试试
评论 (0)