当前位置: 首页 > news >正文

JAVA中的Wrapper类

ava中的Wrapper类,也称为包装类,是Java提供的一组特殊类,它们将基本数据类型(如int、char、double等)封装为对象。这种封装提供了基本数据类型所不具备的功能,如类型转换、序列化、以及在集合(如ArrayList、HashMap等)中存储基本数据类型值的能力,因为集合只能存储对象。Java的Wrapper类遵循了Java的自动装箱(Autoboxing)和拆箱(Unboxing)机制,使得基本数据类型与对应的包装类型之间的转换变得简单且高效。

Wrapper类概览

Java提供了八种基本数据类型的包装类,它们分别是:

  • `Boolean`(对应`boolean`)
  • `Byte`(对应`byte`)
  • `Character`(对应`char`)
  • `Short`(对应`short`)
  • `Integer`(对应`int`)
  • `Long`(对应`long`)
  • `Float`(对应`float`)
  • `Double`(对应`double`)

Wrapper类的特点

  • 1. 封装:将基本数据类型封装为对象,提供了更多的功能。
  • 2. 类型安全:由于它们都是对象,因此可以更安全地用在泛型集合中。
  • 3. 方法支持:每个包装类都提供了丰富的方法来操作封装的数据,如`parseInt(String s)`(`Integer`类)、`valueOf(String s)`(所有包装类)等。
  • 4. 自动装箱与拆箱:Java 5(JDK 1.5)及以后的版本引入了自动装箱和拆箱机制,简化了基本数据类型与包装类之间的转换。

Wrapper类的代码例子及注释

Integer类示例

// Integer 类的使用示例
public class IntegerExample {public static void main(String[] args) {// 基本数据类型到包装类的转换(手动装箱)Integer intObj1 = Integer.valueOf(100); // 使用valueOf方法Integer intObj2 = new Integer(100); // 使用构造函数(已不推荐使用,因为可能导致内存浪费)// 自动装箱Integer intObj3 = 100; // 编译器自动将基本数据类型转换为包装类对象// 包装类到基本数据类型的转换(手动拆箱)int intValue1 = intObj1.intValue(); // 使用intValue方法// 自动拆箱int intValue2 = intObj3; // 编译器自动将包装类对象转换为基本数据类型// Integer类的常用方法String str = "123";// 将字符串转换为Integer对象Integer intObjFromStr = Integer.parseInt(str);// 将字符串转换为Integer对象(更安全,因为可以处理null)Integer intObjFromStrSafe = Integer.valueOf(str);// 使用Integer.MAX_VALUE和Integer.MIN_VALUESystem.out.println("Integer的最大值: " + Integer.MAX_VALUE);System.out.println("Integer的最小值: " + Integer.MIN_VALUE);// 比较两个Integer对象// 注意:对于-128到127之间的整数,Integer会缓存这些对象的实例Integer cachedInt1 = 127;Integer cachedInt2 = 127;System.out.println("Cached integers comparison: " + (cachedInt1 == cachedInt2)); // trueInteger nonCachedInt1 = 128;Integer nonCachedInt2 = 128;System.out.println("Non-cached integers comparison: " + (nonCachedInt1 == nonCachedInt2)); // false}
}


 

其他Wrapper类的使用

虽然其他包装类的使用方式与`Integer`类似,但每个类都有其特定的用途和方法。例如:

  • Boolean:用于逻辑条件的封装,提供了`TRUE`和`FALSE`常量。
  • Character:提供了对字符的操作,如`isDigit(char ch)`检查字符是否为数字。
  • Double和Float:用于高精度的浮点数运算,提供了`parseDouble(String s)`和`parseFloat(String s)`等方法。
  • Byte、Short、Long:分别用于封装8位、16位和64位的有符号整数,提供了相应的转换方法和常量。

自动装箱与拆箱

自动装箱和拆箱是Java 5引入的特性,极大地简化了基本数据类型与包装类之间的转换。但需要注意的是,这种便利背后可能会隐藏性能问题,因为每次装箱和拆箱操作都会创建新的对象(对于`Integer`在[-128, 127]范围内的整数,Java会缓存这些对象的实例)。

自动装箱指的是将基本数据类型转换为对应的包装类对象。例如:

int num = 10; // 基本数据类型
Integer numObj = num; // 自动装箱,num被转换为Integer对象


 

自动拆箱指的是将包装类对象转换为对应的基本数据类型。例如:

Integer numObj = 10; // 包装类对象
int num = numObj; // 自动拆箱,numObj被转换为int基本数据类型


 

自动装箱和拆箱大大简化了代码的编写,但频繁的使用可能会导致性能问题,特别是在循环中。因此,在性能敏感的应用中,应该谨慎使用这些特性,或者考虑使用原始类型。

性能考虑

在Java中,由于自动装箱和拆箱的存在,可能会导致性能问题,尤其是在循环中。例如:

// 不推荐的做法 - 在循环中使用自动装箱和拆箱
for (int i = 0; i < 1000000; i++) {Integer boxedI = i; // 自动装箱// ... 进行一些操作 ...
}


 

上面的代码片段会导致大量的临时`Integer`对象被创建和垃圾收集,影响程序的性能。为了优化性能,可以采用以下方法之一:

  • 使用原始类型的数组而不是包装类的集合(如`int[]`代替`ArrayList<Integer>`)。
  • 在循环外部声明一个包装类的实例并重复使用它(虽然这仍然会产生一些开销)。
  • 在循环中使用原始类型的本地变量(如`int i`代替`Integer boxedI`)。

相关文章:

JAVA中的Wrapper类

ava中的Wrapper类&#xff0c;也称为包装类&#xff0c;是Java提供的一组特殊类&#xff0c;它们将基本数据类型&#xff08;如int、char、double等&#xff09;封装为对象。这种封装提供了基本数据类型所不具备的功能&#xff0c;如类型转换、序列化、以及在集合&#xff08;如…...

在没有硬盘的情况下进行电脑数据迁移

电脑数据迁移方式 在更换电脑的时候需要进行文件的传输&#xff0c;但是没有硬盘可以选择使用网线直连或者无线文件共享。通用配置 1.将旧电脑的文件夹或者磁盘设置文件共享 找到指定的文件夹右键属》属性&#xff0c;点击共享》点击高级共享 选择共享文件夹以及修改共享用户…...

C++转Java基础知识

目录 1. Java基础知识 1.1 JDK和JVM 1.2 Java基础代码演示 1.3 Java中的注释 1.4 Java中的关键字 1.5 Java中的println和print的区别 2. Java中的数据类型 2.1 常量 2.2 标识符 2.3 变量 2.4 类型转换 2.5 自动类型转换 2.6 强制类型转换 3. 运算符 3.1 自增运算…...

搭建jenkins一键部署java项目

一、搭建jenkins 链接: https://pan.baidu.com/s/1jzx15PiyI8EhLd_vg7q8bw 提取码: ydhl 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 直接使用docker导入镜像&#xff0c;运行就好 docker run -di --name jenkins -p 8080:8080 -v /home/jenkins_home:/var/je…...

从零到一打造自己的大模型(一)模型实现

前言 最近看了很多大模型&#xff0c;也使用了很多大模型。对于大模型理论似乎很了解&#xff0c;但是好像又缺点什么&#xff0c;思来想去决定自己动手实现一个 toy 级别的模型&#xff0c;在实践中加深对大语言模型的理解。 在这个系列的文章中&#xff0c;我将通过亲手实践…...

【开源项目】基于RTP协议的H264码流发送器和接收器

RTP协议 1. 概述1.1 RTP协议1.2 RTP和UDP的关系 2. RTP打包H264码流2.1 RTP单一传输2.2 RTP分片传输2.3 RTP多片合入传输 3.工程3.1 头文件3.1.1 rtp.h3.1.2 utils.h 3.2 cpp文件3.2.1 rtp.cpp3.2.2 utils.cpp 4.测试5.小结 参考&#xff1a; 视音频数据处理入门&#xff1a;UD…...

【C++】4.类和对象(2)

文章目录 1.类的默认成员函数2.构造函数 1.类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前…...

搭建基于树莓派的Linux学习环境(TODO)

主要是想学一下Linux内核&#xff0c;所以搭一套环境&#xff0c;其实有几个选择&#xff0c;好几个都是我买了板子的。 首先是正点原子的RK3568&#xff0c;最早是想弄安卓&#xff0c;但是SDK的大小真的把我劝退了&#xff0c;动不动几百个G的空间&#xff0c;还有就是保底1…...

《大电机技术》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《大电机技术》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《机电产品开发与创新》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;哈尔滨电气集团公司 主办…...

Python 中使用 Split 忽略逗号

在 Python 中&#xff0c;split 方法可以用于将字符串分割成列表&#xff0c;默认情况下使用空格作为分隔符&#xff0c;但你也可以指定其他分隔符。若想使用 split 方法忽略逗号并按其他分隔符分割字符串&#xff0c;可以使用以下几种方法。 1、问题背景 在 Python 中&#x…...

YOLOv10改进 | 主干篇 | YOLOv10引入CVPR2023 顶会论文BiFormer用于主干修改

1. 使用之前用于注意力的BiFormer在这里用于主干修改。 YOLOv10改进 | 注意力篇 | YOLOv10引入BiFormer注意力机制 2. 核心代码 from collections import OrderedDict from functools import partial from typing import Optional, Union import torch import torch.nn as n…...

sql注入靶场搭建

1.安装小皮面板&#xff08;PhpStudy&#xff09; 1.从官网下载&#xff1a;http://www.xp.cn 2、Sqli-labs环境安装 准备好sqli-labs-php7-master文件 3.安装之前确保本地没有下载mysql服务器 如果电脑下载了MySQL可以把MySQL的服务停掉 此电脑>右键>管理>服务…...

【MySQL】MySQL的JSON特性

引言 MySQL从5.7版本开始引入了JSON数据类型&#xff0c;并在8.0版本中大大增强了JSON的支持&#xff0c;包括函数和索引功能。JSON数据类型允许你在MySQL表中存储JSON文档&#xff0c;这些文档可以是对象或数组&#xff0c;并且你可以使用SQL查询来检索、搜索、更新和修改这些…...

微信小程序 - 自定义计数器 - 优化(键盘输入校验)

微信小程序通过自定义组件&#xff0c;实现计数器值的增加、减少、清零、最大最小值限定、禁用等操作。通过按钮事件触发方式&#xff0c;更新计数器的值&#xff0c;并修改相关联的其它变量。通过提升用户体验&#xff0c;对计数器进行优化设计&#xff0c;使用户操作更加便捷…...

Nacos 容器化安装和代理配置指南

简介 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。本文将介绍如何使用 Docker 容器化安装 Nacos 以及如何配置 Nacos 的代理。 前提条件 已安装 Docker 和 Docker Compose基本的 Doc…...

css水波浪动画效果

为缩小gif大小&#xff0c;动画效果做了加速&#xff0c;效果如下&#xff1a; <!DOCTYPE html> <html> <head> <style> *{padding:0;margin:0;}/*清除默认填充及边距*/.water{position:relative;width:100vw;height:100vh;overflow:hidden;background…...

SQL二次注入

目录 1.什么是二次注入&#xff1f; 2.二次注入过程 2.1寻找注入点 2.2注册admin#用户 2.3修改密码 1.什么是二次注入&#xff1f; 当用户提交的恶意数据被存入数据库后&#xff0c;因为被过滤函数过滤掉了&#xff0c;所以无法生效&#xff0c;但应用程序在从数据库中拿…...

深入学习小程序开发第二天:数据绑定与动态更新

一、概念 在小程序中,数据绑定是指将页面的数据和视图进行关联,使得数据的变化能够自动反映在视图上,而不需要手动操作DOM。这种绑定是双向的,即数据改变时视图更新,视图操作(如用户输入)也能改变数据。 二、用法 1.单向数据绑定与双向数据绑定: 在小程序中,数据绑定…...

【ai】 时间序列分析的python例子

时间序列分析 :分析和理解随时间变化的数据序列 在gcc的趋势滤波后,需要对排队延迟梯度进行检测及调整,参考的是一个阈值, 调整阈值时就使用了时间序列分析技术: 时间序列分析是统计学和数据分析中的一种技术,用于分析和理解随时间变化的数据序列。时间序列数据具有时间上…...

生成订单幂等性(防止订单重复提交)

订单唯一性(防止重复下单)方案 重复下单产生原因&#xff1a; 客户端原因&#xff1a; 比如下单的按键在点按之后&#xff0c;在没有收到服务器请求之前&#xff0c;按键的状态没有设为已禁用状态&#xff0c;还可以被按。又或者&#xff0c;在触摸屏下&#xff0c;用户手指…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...