Java 包装类(Wrapper)

news/2025/3/31 22:29:52/

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.ppmy.cn/news/1023528.html

相关文章

vuejs 设计与实现 - 渲染器 - 挂载与更新

渲染器的核心功能:挂载与更新 1.挂载子节点和元素的属性 1.2挂载子节点 (vnode.children) vnode.children可以是字符串类型的&#xff0c;也可以是数组类型的&#xff0c;如下&#xff1a; const vnode {type: div,children: [{type: p,children: hello}] } 可以看到&#…

Android Socket使用TCP协议实现手机投屏

本节主要通过实战来了解Socket在TCP/IP协议中充当的是一个什么角色&#xff0c;有什么作用。通过Socket使用TCP协议实现局域网内手机A充当服务端&#xff0c;手机B充当客户端&#xff0c;手机B连接手机A&#xff0c;手机A获取屏幕数据转化为Bitmap&#xff0c;通过Socket传递个…

rust学习-tokio::time

示例 use std::time::Duration; use tokio::{task, time::interval};#[tokio::main] async fn main() {let mut interval interval(Duration::from_secs(1));let handle task::spawn(async move {loop {interval.tick().await;println!("tick");}});handle.await.…

微信小程序实现双向滑动快捷选择价格(价格区间)

实现样子 提示&#xff1a;效果可以自己自定义&#xff0c;自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价&#xff0c;右边为最高价格&#xff0c;可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时&#xff0c;继续拖动&#xff0…

C++中template的使用

一.什么是C中的template C 中的模板&#xff08;Template&#xff09;是一种通用编程技术&#xff0c;用于实现泛型编程。模板允许在编译时生成代码&#xff0c;以适应不同的数据类型和算法需求。通过使用模板&#xff0c;可以编写可重用的代码&#xff0c;提高代码的灵活性和效…

Kali Hyper-V安装正常启动后 黑屏 只能进命令模式

问题: Hyper-V安装虚拟机Kali系统一切安装正常, 没有出现错误. 安装成功后重启,只能进入命令模式,tt1-tt6,进不去GUI桌面. 尝试: 一代二代虚拟硬盘都试过,同样问题,只能开进后进入命令模式,在命令模式下一切运行正常, 也修复过系统 GNOM等的,不管用. 以下为国外论坛给的建议,尝…

flask-migrate使用

1.介绍 # 表,字段发生变化&#xff0c;都会有记录&#xff0c;自动同步到数据库中--》django支持这种操作 # 原生的sqlalchemy&#xff0c;不支持修改表的 # flask-migrate可以实现类似于django的 python manage.py makemigrations #记录 python manage.py migrate …

Java线程池参数优化详解和使用场景

Java线程池参数优化详解和使用场景 1. 介绍 线程池在Java多线程编程中扮演着重要的角色。它可以有效地管理和复用线程&#xff0c;避免频繁地创建和销毁线程带来的资源消耗。然而&#xff0c;在实际应用中&#xff0c;线程池的性能和稳定性往往需要根据具体的场景进行参数优化…