基本类型和包装类型的区别

18 篇文章 0 订阅
13 篇文章 0 订阅
本文详细介绍了Java中基本类型和包装类型的区别,包括默认值、内存分配、泛型使用、效率和自动装箱拆箱等方面。包装类型可以为null,适用于数据库查询结果可能为null的情况,且可用于泛型。而基本类型更高效,直接存储在栈中。此外,包装类型的‘==’比较可能与预期不符,需用equals方法确保值的比较。自动装箱和拆箱简化了基本类型与包装类型间的转换。
摘要由CSDN通过智能技术生成

基本类型和包装类型的区别

这 8 种基本数据类型的默认值以及所占空间的大小如下:

6 种数字类型 :byte、short、int、long、float、double
1 种字符类型:char
1 种布尔型:boolean。

在这里插入图片描述
这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean 。

== 包装类型不赋值就是 Null ,而基本类型有默认值,且不是 Null。 ==

基本数据类型直接存放在 Java 虚拟机栈中的局部变量表中,而包装类型属于对象类型,我们知道对象实例都存在于堆中。相比于对象类型, 基本数据类型占用的空间非常小。

一、包装类型可以为 null,而基本类型不可以

数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常

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

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

List list = new ArrayList<>(); // 提示 Syntax error, insert “Dimensions” to complete ReferenceType
List list = new ArrayList<>();

为什么呢?因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类——基本类型是个特例。

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

基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。

相比较于基本类型而言,包装类型需要占用更多的内存空间。假如没有基本类型的话,对于数值这类经常使用到的数据来说,每次都要通过 new 一个包装类型就显得非常笨重。

两个包装类型的值可以相同,但两者并不相等

Integer chenmo = new Integer(10);
Integer wanger = new Integer(10);

System.out.println(chenmo == wanger); // false
System.out.println(chenmo.equals(wanger )); // true

两个包装类型在使用‘ == ’进行判断的时候,判断的是其指向的地址值是否相等。chenmo 和 wanger 两个变量使用了 new 关键字,导致它们在使用‘ == ’比较的时候输出了 false。

而 chenmo.equals(wanger) 的输出结果为 true,是因为 equals 方法内部比较的是两个 int 值是否相等。源码如下。

private final int value;

public int intValue() {
    return value;
}
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

虽然 chenmo 和 wanger 的值都是 10,但他们并不相等。换句话说就是:将“==”操作符应用于包装类型比较的时候,其结果很可能会和预期的不符。
在这里插入图片描述

四、自动装箱和自动拆箱

把基本类型转换成包装类型的过程叫做装箱(boxing)。
把包装类型转换成基本类型的过程叫做拆箱(unboxing)。

自动装箱是通过 Integer.valueOf() 完成的;自动拆箱是通过 Integer.intValue() 完成的。

五、深拷贝 vs 浅拷贝

浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值