Java基础面试题—— 包装类型和基本类型的区别是什么?

哈根达斯
2024-12-11 / 0 评论 / 13 阅读 / 正在检测是否收录...

面试回答重点

基本类型 :Java 中有 8 种基本数据类型(intlongfloatdoublecharbytebooleanshort),它们是直接存储数值的变量,位于栈上(局部变量),性能较高,且不支持 null

包装类型 :每个基本类型都有一个对应的包装类型(IntegerLongFloatDoubleCharacterByteBooleanShort)。包装类型是类,存储在堆中,可以用于面向对象编程,并且支持 null

区别总结

(1)性能区别

  • 基本类型:占用内存小,效率高,适合频繁使用的简单操作。
  • 包装类型:因为是对象,涉及内存分配和垃圾回收,性能相对较低。

(2)比较方式不同

  • 基本类型 :比较用 ==,直接比较数值。
  • 包装类型 :比较时,== 比较的是对象的内存地址,而 equals() 比较的是对象的值。

(3)默认值不同

  • 基本类型:默认值是 0,false 等。
  • 包装类型:默认为 null。

(4)初始化的方式不同

  • 基本类型:直接赋值。
  • 包装类型:需要采用 new 的方式创建。

(5)存储方式不同

  • 基本类型:如果是局部变量则保存在栈上面,如果是成员变量则在堆中。
  • 包装类型:保存在堆上(成员变量,在不考虑 JIT 优化的栈上分配时,都是随着对象一起保存在堆上的)。

扩展知识

自动装箱与拆箱

Java 是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是 Object类型。

为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型"包装起来",使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

  • 装箱:基本类型自动转换为包装类型对象。
  • 拆箱:包装类型对象自动转换为基本类型的值。

缓存机制

包装类型中的 ByteShortIntegerLong 对某些范围内的值(例如 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

基础类型与包装类长度和范围

分类基本数据类型包装类长度表示范围
布尔型booleanBoolean//
byteByte1 字节-128 ~ 127
shortShort2 字节-32768 ~ 32767
整型intInteger4 字节-2,147,483,648 ~ 2,147,483,647
longLong8 字节-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
字符型charCharacter2 字节Unicode 字符集中的任何字符
浮点型floatFloat4 字节约 -3.4E38 ~ 3.4E38
doubleDouble8 字节约 -1.7E308 ~ 1.7E308

另外,近期才哥整理出了一个可用于快速刷面试题的小程序,其中收录了常见面试题及其答案,涵盖了基础、并发、JVM、MySQL、Redis、Spring、SpringMVC、SpringBoot、SpringCloud、消息队列等多个类型。可以看下方小程序试试

才哥IT刷题小程序

0

评论 (0)

取消