前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官:为什么有了基本类型,还需要包装类型呢?

面试官:为什么有了基本类型,还需要包装类型呢?

作者头像
程序视点
发布2023-11-09 17:23:35
2740
发布2023-11-09 17:23:35
举报
文章被收录于专栏:程序小小事
将程序视点设为星标精品文章第一时间阅读

大家好,欢迎来到程序视点!我是小二哥。

前言

在之前的文章中,我们提到过Java种的8种基本类型:byte、short、int、long、float、double、char、boolean。大家肯定非常熟悉了。

我们知道每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。

有了基本类型,又弄出个包装类型,这是为什么呢?面试场上很容易出现这样的考题,就是想看看你基础好不好。

基本类型和包装类型

要想知道为什么有了基本类型后,还出现包装类型,就需要先分辨出它们的区别。

基本类型有初始值,而包装类型的默认值是null

这也说明了一个点:包装类型可以为 null,而基本类型不可以为null。别小看这一点区别,它使得包装类型可以应用于 POJO(Plain Ordinary Java Object) 中,而基本类型则不行

为什么呢?《阿里巴巴 Java 开发手册》上有详细的说明,可以帮助我们理解这一点。

【强制】所有的POJO类属性必须使用包装数据类型。 正例:数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

包装类型可用于泛型,而基本类型不可以

举个例子:

代码语言:javascript
复制
List<int> a = new ArrayList<>();

如果我们像上面这么写,编译器会报错:Type argument cannot be of primitive type(类型参数不能为基本类型)

这又是为什么呢?因为泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类。而int基本类型不是Object类或Object的子类。

存储位置不同

基本数据类型作为局部变量存放在 Java 虚拟机中的局部变量表中。基本数据类型作为成员变量(未被 static 修饰 )存放在 Java 虚拟机的中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。

我们知道,在栈中的数据,在弹栈后,数据就没有了。假如没有包装类型,那么想要留存的一些数据可能在弹栈后就没有了。假如没有基本类型的话,对于数值这类经常使用到的数据来说,每次都要通过 new 一个包装类型就显得非常笨重。这就引出下一个不同点。

空间占用不同

基本数据类型占用的空间往往非常小,且是固定的。包装类型是对象类型,想想对象的结构,占用的空间就比基本类型要大一些了。

使用“==”进行判断时的不同

我们来看一个例子:

代码语言:javascript
复制
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b); // false
System.out.println(a.equals(b )); // true

包装类型是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,因此在使用 == 进行判断的时候,判断的是其指向的地址是否相等,若想判断它们的内容是否相等,需要使用equals()方法。而基本类型使用 == 直接判断其值是否相等。

小结

关于基本类型和包装类型间的差别,大家心里都大略有些概念。但就是细说的时候理不清楚。以上就是它们之间的区别,也就回答了我们标题中的问题。我们往往对有些知识是知道的,但真让我们表达的时候,却说不出一个所以然来。因此,我们要多见一些问题,多看看别人的思考的方向,以便后以后碰到新问题时,能给我们提示些方向。

好啦!今天就到这里啦~~ Bye~bye!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序视点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本类型和包装类型
    • 基本类型有初始值,而包装类型的默认值是null
      • 包装类型可用于泛型,而基本类型不可以
        • 存储位置不同
          • 空间占用不同
            • 使用“==”进行判断时的不同
            • 小结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档