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

2023-05-16

简介

Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点

区别

1.包装类型可以为 null,而基本类型不可以

它使得包装类型可以应用于 POJO 中,而基本类型则不行 POJO:简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法,示例如下。

class Writer {
    private Integer age;
    private String name;
​
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
}

为什么 POJO 的属性必须要用包装类型? 《阿里巴巴 Java 开发手册》上有详细的说明 数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

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

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

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

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

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

4.自动装箱和自动拆箱

有了基本类型和包装类型,肯定有些时候要在它们之间进行转换。 把基本类型转换成包装类型的过程叫做装箱反之,把包装类型转换成基本类型的过程叫做拆箱 在 Java SE5 之前,开发人员要手动进行装拆箱

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

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

Integer chenmo  = 10;  // 自动装箱
int wanger = chenmo;     // 自动拆箱
​
等价于
=>
​
Integer chenmo = Integer.valueOf(10);
int wanger = chenmo.intValue();

也就是说,自动装箱是通过Integer.valueOf()完成的;自动拆箱是通过 Integer.intValue() 完成的 特别注意:

当需要进行自动装箱时,如果数字在 -128 至 127 之间时,会直接使用缓存中的对象,而不是重新创建一个对象

// 1)基本类型和包装类型
int a = 100;
Integer b = 100;
System.out.println(a == b);//true
​
// 2)两个包装类型
Integer c = 100;
Integer d = 100;
System.out.println(c == d);//true
​
// 3)
Integer c = 200;
Integer d = 200;
System.out.println(c == d);//false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基本类型和包装类型的区别 的相关文章

随机推荐

  • C++改写Matlab源码实践一之【显示图片】——————附带详细讲解和示例

    文章目录 0 背景1 Matlab有用代码提取2 转换为C 43 43 3 使用纯C 43 43 实现mat数据中的图片显示4 代码封装5 福利其他 0 背景 这里以显示Matlab变量struct中的图片程序代码为例 xff0c 示范如何
  • C++/Java调用C++动态链接库————附带示例和详细讲解

    文章目录 0 准备1 C 43 43 调用动态链接库2 Java调用C 43 43 动态链接库3 运行 0 准备 在CMake中 xff0c 使用如下的方法把代码编译成动态 静态链接库 xff1a span class token comm
  • 什么变量存放在栈和堆

    内容会持续更新 xff0c 有错误的地方欢迎指正 xff0c 谢谢 什么是栈区 xff0c 什么是堆区 栈区 xff08 stack xff09 xff1a 由编译器自动分配释放 xff0c 存放函数的参数值 局部变量的值等 xff0c 内
  • C++改写Matlab源码实践二之【传递表格数据】————附带详细讲解和示例

    文章目录 0 背景1 Matlab有用代码提取2 转换为C 43 43 2 1 设定变量类型2 2 预先和定义声明变量 3 改写转换后的C 43 43 代码3 1 指定输入的文件3 2 改写处理 96 Data 96 和 96 Data1
  • Kylin4.0下载安装指南———附带详细安装过程

    文章目录 0 结果1 下载1 1 下载kylin1 2 下载spark1 3 jdk hadoop hive zookeeper安装1 4 Mysql安装 2 配置Mysql数据存储2 1 配置mysql2 2 配置Zookeeper2 3
  • 2023年的专业408算法题

    文章目录 0 结果1 题目2 思路3 实现附录 0 结果 1 题目 对于一个有向图 xff0c 如果一个顶点的出度大于入度 xff0c 则这个顶点称为K顶点 有向图用邻接矩阵存储 xff0c 数据结构定义如下 xff1a span clas
  • 专业408历年算题大全(2009~2023年)——附带详细代码和多种思路

    文章目录 1 题型总结1 1 线性表 xff08 6年 xff09 1 1 1 常用思想 1 2 链表 xff08 4年 xff09 1 2 1 常用思想 1 3 树 xff08 3年 xff09 1 3 1 常用思想 1 4 图 xff0
  • 2022年专业408算法题

    文章目录 0 结果1 题目2 思路3 实现3 1 思路一 xff08 中序遍历搜查搜索数 xff09 3 2 思路二 xff08 二叉搜索树的定义 xff09 附录 0 结果 1 题目 2 思路 1 xff0c 首先明确二叉搜索树的定义 x
  • 2021年专业408算法题

    文章目录 0 结果1 题目2 思路3 实现附录 0 结果 1 题目 2 思路 遍历邻接矩阵的每一行和列的非零元素的个数 xff0c 来统计每个顶点的度 xff08 出度和入度和 xff09 xff0c 并记录度为奇数的顶点个数 xff0c
  • jetbrains软件打开后突然闪退

    文章目录 0 背景1 错误重现2 错误原因3 解决方法 0 背景 在使用jetbrains编程软件时 xff0c 突然出现打开就闪退的情况 一开始还以为是系统升级到macOS13 1的原因 xff0c 经过查阅网上资料 xff0c 发现ma
  • 2011年专业408算法题

    文章目录 0 结果1 题目2 思路2 1 思路1 xff08 暴力解 xff1a 排序 xff09 2 2 思路2 xff08 较优解 xff1a 归并合并数组 xff09 2 3 思路3 xff08 较优解 xff1a 数组指针后移 xf
  • 2014年408专业算法题

    文章目录 0 结果1 题目2 思路附录 0 结果 1 题目 2 思路 二叉树的带权路径长度 xff08 WPL xff09 的计算方法有两种 xff1a 1 xff0c 定义 xff1a W P L 61
  • 2016年专业408算法题

    文章目录 0 结果1 题目2 思路2 1 思路1 xff08 较优解 xff1a 排序 xff09 2 2 思路2 xff08 最优解 xff1a 类快排思想排序 xff09 附录 0 结果 较优解 xff1a 最优解 xff1a 1 题目
  • 2017年408专业算法题

    文章目录 0 结果1 题目2 思路附录 0 结果 1 题目 2 思路 因为要转换为中序表达式 xff0c 因此使用中序遍历 在中序遍历的过程中 xff0c 对于当前访问的非空结点p xff0c 则先输出 34 xff0c 然后递归调用左子树
  • Python面向对象编程

    文章目录 1 作用域1 1 局部作用域 2 类成员权限3 是否继承新式类4 多重继承5 虚拟子类6 内省 在运行时确定对象类型的能力 7 函数参数8 生成器 1 作用域 1 1 局部作用域 1 xff0c 当局部变量遮盖全局变量 xff0c
  • 增大整数———晴问算法

    文章目录 1 题目2 思路3 代码 1 题目 2 思路 首先把数字n转化为字符串s xff0c 然后把第一个字符转换为数字得到正整数的首位 如果输入的数位a大于首位 xff0c 则把字符串s拼接在字符串化的数位后面形成新字符串ans xff
  • 从零开始开发物联网项目(6)——Arduino和ESP8266自动数据上传终端

    前面几节介绍了Mqtt协议以及用ESP8266模块作为客户端连接Mqtt服务器并实现数据的发布和订阅 这一节我们就正式的开始制作第一个物联网终端 xff0c 基于Arduino和ESP8266模块 之所以选择了Arduino是因为它的开发比
  • centos7无法上网问题

    项目场景 xff1a 在虚拟机VM中安装了centos7 xff0c 突然无法上网 xff0c 不知道咋回事 xff0c 所以上网查了资料博客 xff0c 现总结如下 一 首先打开虚拟的设置 xff0c 可以看到虚拟机网络的设置默认为NAT
  • centos安装jdk1.8

    Linux平台安装JDK的方式大致有三种 xff08 rpm yum 手动安装 xff0c 这里简单介绍手动安装JDK的方式 一 去Oracle官网下载所需JDK包 这里跟windows平台差不多 xff0c 去官网查找链接下载对应JDK安
  • 基本类型和包装类型的区别

    简介 Java 的每个基本类型都对应了一个包装类型 xff0c 比如说 int 的包装类型为 Integer xff0c double 的包装类型为 Double 基本类型和包装类型的区别主要有以下 4 点 区别 1 包装类型可以为 nul