Java 包装类(Wrapper)

Wrapper概念

        Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

        各数据类型对应的包装类

 这里除了int (包装类为Integer)和char(包装类为Character)外,其他数据类型的包装类型都是自己的首字母大写,所有记忆起来会比较容易。

基本类型和引用类型的区别有以下几点:

  • 基本类型不是对象,而引用类型是对象.
  • 声明方式:基本数据类型直接声明,引用数据类型需要用new关键字创建.
  • 存储的位置:基本数据类型存储在堆栈中,引用类型则通过引用指向实例,具体的实例保存在堆中.
  • 基本数据类型的初始值依据其类型而定,引用数据类型初始值为null.

 包装类的主要用途:

  • 集合和泛型只能存放引用类型的数据, 不能存放基本数据类型
  • 基本类型和包装类型之间可以互相转换,自动装箱拆箱
  • 包装类的parse方法可以实现基本数据类型+string类型之间的相互转换
  • 函数需要传递进去的参数为Object类型,传入基本数据类型就不可行

将基本类型转换为包装对象

我们还可以使用valueOf()方法将原始类型转换为相应的对象。

示例1:包装对象的原始类型

示例

class Main {public static void main(String[] args) {//创建原始类型int a = 5;double b = 5.65;//转换为包装对象Integer aObj = Integer.valueOf(a);Double bObj = Double.valueOf(b);if(aObj instanceof Integer) {System.out.println("创建一个Integer对象。");}if(bObj instanceof Double) {System.out.println("创建一个Double对象。");}}
}

输出结果

创建一个Integer对象。
创建一个Double对象。

在上面的示例中,我们使用了valueOf()将原始类型转换为对象的方法。

在这里,我们使用instanceof运算符来检查生成的对象是否属于Integer或Double类型。

但是,Java编译器可以直接将原始类型转换为相应的对象。例如:

int a = 5;
//转换为对象
Integer aObj = a;double b = 5.6;
//转换为对象
Double bObj = b;

此过程称为自动装箱。要了解更多信息,请访问Java装箱拆箱机制。

注意:我们还可以使用包装类(Wrapper)构造函数将原始类型转换为包装对象。但是在Java 9之后,不再使用构造函数

包装对象成原始类型

要将对象转换为原始类型,我们可以使用每个包装类中对应的值方法(intValue()、doubleValue()等)。

示例2:将包装对象转换为原始类型

示例

class Main {public static void main(String[] args) {//创建包装类的对象Integer aObj = Integer.valueOf(23);Double bObj = Double.valueOf(5.55);//转换为原始类型int a = aObj.intValue();double b = bObj.doubleValue();System.out.println("a的值: " + a);System.out.println("b的值: " + b);}
}

输出结果

a的值: 23
b的值: 5.55

在上面的示例中,我们使用了intValue() 和 doubleValue()方法将Integerand和Double对象转换为相应的原始基本类型。

但是,Java编译器可以自动将对象转换为相应的原始类型。例如,

Integer aObj = Integer.valueOf(2);
//转换为int类型
int a = aObj;Double bObj = Double.valueOf(5.55);
//转换为double类型
double b = bObj;

此过程称为拆箱。要了解更多信息,请访问Java装箱拆箱机制。

包装类的优点

  • 在Java中,有时我们可能需要使用对象而不是原始数据类型。例如,在使用集合时。

    // 错误
    ArrayList<int> list = new ArrayList<>();//正常运行
    ArrayList<Integer> list = new ArrayList<>();

    在这种情况下,包装器类可以帮助我们将原始数据类型用作对象。

  • 我们可以将空值存储在包装对象中。例如,

    //将生成一个错误
    int a = null;// 正常运行
    Integer a = null;

注意:基本类型比相应的对象更有效。因此,当需要效率时,总是建议使用原始类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62151.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】系统内核中System.map中字段含义解释

可以通过命令行过来初始化内容 cat System.map-4.18.0-193.el8.x86_64 | grep pci | grep initcall "T"&#xff1a;表示该符号是一个全局函数&#xff0c;可以被其他模块或文件访问。 "D"&#xff1a;表示该符号是一个全局数据对象&#xff0c;可以被其…

Java学习内容有什么?这篇全是干货

Java 是目前应用非常广泛的一种计算机高级编程语言&#xff0c;它是一种计算机程序设计语言&#xff0c;被广泛应用于各大行业和领域&#xff0c;如金融、汽车、医疗、电子、互联网等等。Java 诞生之后风靡全球&#xff0c;并且一直保持其高人气&#xff0c;因此 Java 的学习也…

解决createRoot is not a function

报错&#xff1a; 出现的原因&#xff1a;在于把react18使用的vite构建&#xff0c;在开发中因react版本太高与其他库不兼容&#xff0c;而在降级的时候&#xff0c;出现以上dom渲染出现报错。 解决&#xff1a;将 src/index.j文件改成如下 import React from react; import…

opencv进阶01-直方图的应用及示例cv2.calcHist()

直方图是什么&#xff1f; 直方图是一种图形表示方法&#xff0c;用于显示数据中各个数值或数值范围的分布情况。它将数据划分为一系列的区间&#xff08;也称为“箱子”或“bin”&#xff09;&#xff0c;然后统计每个区间中数据出现的频次&#xff08;或频率&#xff09;。直…

【碎碎念】在CSDN 512天创作纪念日

‍‍&#x1f3e1;博客主页&#xff1a; virobotics的CSDN博客&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『碎碎念』 &#x1f37b;上篇纪念文&#xff1a; 我的创作纪念日 文章目录 &#x1f4e9;&#x1f4e9;&#x1f4e9;前言&#x1f…

linux pwn 基础知识

环境搭建 虚拟机安装 镜像下载网站为了避免环境问题建议 22.04 &#xff0c;20.04&#xff0c;18.04&#xff0c;16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上&#xff0c;内存也尽量大一些。硬盘大小只是上界&#…

在vue项目使用数据可视化 echarts ,柱状图、折线图、饼状图使用示例详解及属性详解

官网地址&#xff1a;Apache ECharts ​一、下载插件并在页面中引入 npm install echarts --save 页面导入&#xff1a; import * as echarts from echarts 全局导入&#xff1a; main.js 中&#xff0c;导入并注册到全局 import echarts from echarts Vue.prototype.$echart…

Flutter实现倒计时功能,秒数转时分秒,然后倒计时

Flutter实现倒计时功能 发布时间&#xff1a;2023/05/12 本文实例为大家分享了Flutter实现倒计时功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 有一个需求&#xff0c;需要在页面进行显示倒计时&#xff0c;倒计时结束后&#xff0c;做相应的逻辑处理。 实…

spring cloud alibaba 应用无法注册到sentinel dashboard

一。技术背景 由于升级jdk17的需要 我们将项目中的 spring cloud spring cloud alibaba 以及springboot进行了升级 各版本如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二。问题表现 当启动项目服务后&#xff0c;服务无法注册到 sentin…

C#,OpenCV开发指南(01)

C#&#xff0c;OpenCV开发指南&#xff08;01&#xff09; 一、OpenCV的安装1、需要安装两个拓展包&#xff1a;OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…

10个牛逼的编程范式,你已经用过了几个?

《10个牛逼的编程范式&#xff0c;你已经用过了几个&#xff1f;》 编程范式是计算机编程中的基本思想和方法论&#xff0c;它描述了不同的编程风格和抽象层次。随着计算机科学的不断发展&#xff0c;编程范式也在不断演进和扩展&#xff0c;从最早的命令式编程到面向对象、声明…

【JavaSpring】注解开发

注解开发定义bean 不指定名称 package org.example.service.impl;import org.example.dao.BookDao; import org.example.service.BookService; import org.springframework.stereotype.Component;Component public class BookServiceimpl implements BookService {private Bo…