Java自动装箱和自动拆箱

2023-10-27

基本类型的包装类

在java中,每一种基本类型都有一个对应的包装类这些类都在java.lang包中。8种基本数据类型所对应的包装类是byte(Byte)、short(Short)、int(Integter)、long(Long)、char(Character)、float(Float)、double(Double)、boolean(Boolean)。
Java语言用包装类来把一个基本类型数据转化为对象。或者说,一个包装类的实例总是包装着一个相应的基本类型的值。需要注意的是,包装类的实例一旦生成,其所包装的基本类型值是不能改变的
包装类的作用:
(1)在有些情况下,能够被处理的数据的类型只能是引用类型,如Java集合中不能存放基本数据类型,如果要存放数字,应该通过包装将基本数据类型包装起来,来间接处理基本类型数据
(2)每一个包装类都包含一组实用方法,其中很多是静态的。这些方法为处理某种基本类型数据提供了丰富的手段。比如Integer类的静态方法parseInt(String s)能将字符串转换为整数,静态方法toBinaryString(int i)返回包含整数i的2进制形式字符串。
1.1包装类对象的创建方式
使用包装类的方法与其他类一样,定义对象的引用、用new运算符创建对象,用方法对象进行操作。
每一个包装类有一个构造方法,可以通过一个相应的基本值生成一个实例,例如:
Integter i=new Integter(10);     //i是Integter类的一个对象,值为10
Float f=new  Float(1.0f);         //f是Float类的一个对象,值为1.0f
Double d=new  Double(1.0)   //b是Double类的一个对象,值为1.0
Boolean b=new Boolean(true) //b是Boolean类的一个对象,值为true
Character c=new Charcater('c') //c是Character类的一个对象,值为'c'
(2)除了Character,其他包装类都有一个构造方法,可以通过一个表示相应基本型值的字符串生成实例。如果指定字符串不能表示一个有效的基本型值,那么除了Boolean,其他包装类的构造器会抛出NUmberFormatException异常。
例如:
Integter  i=new  Integter("123")                    //i是Integter类的一个对象,值为123。
Float f=new Float(“12.34F")                        //f是Float类的对象,值为12.34F
Double d=new Double("1.234D")               //d是Double类的一个对象,值为1.234D
(3)Boolean类的构造方法接受任意字符串,如果字符串为"ture"(忽略大小写),则生成的实例包装true,否则包装false。例如:
Boolean b=new Boolean("True")
Boolean b=new Boolean("123a")
1.2包装类常用的方法:
(1)每个包装类都有一个实例方法xxxValue(),这里xxx是相应的基本数据类型名。使用该方法可以抽取并返回实例所包装的基本型值。例如:
Integter i=new Integter(10);          int j=i.intValue();    //j=10;
Float f=new Float("12.34F");          float fVar=f.folatValue();  //fVar=12.34F;
(2)除了Charcater类和Boolean类,包装类都有一个静态方法valueOf(String s),该方法可以根据一个表示相应基本型值的字符串生成实例。例如:
Integter i=Integter.valueOf("123");               //i是Integter类的一个对象,值为123;
Float f=Float.valueOf("12.34F");                 //f是Float类的一个对象,值为12.34F;
Double d=Double.valueOf("1.234D");        //d是Double类的一个对象,值为1.234D;
(3)除了Character类和Boolean类,包装类都有一个静态方法parseXXX(String  str),该方法把字符串转换为相应的基本类型数据,这里XXX是相应的基本数据类型名。Str不能为null,否则,会抛出NumberFormatException异常。例如:
int    i=Integter.parseInt("123") ;                           //i=123;
double d=Double.parseDouble("qwe");               //抛出NumberFormatException异常。
自动装箱和自动拆箱
把基本类型的值转换为相应的包装类型对象,这一过程称为“装箱”。例如:
Integter iObj=new Integter(100);
Float fObj=new Flaot(3.14f);
Boolean bObj=new Boolean(true);
Charcater cObj=new Character('c');
把包装类对象转换为相应的基本类型的值,这一过程称为“拆箱”;例如:
int  i=iObj.intValue();
float f=fObj.floatValue();
char c=cObj.charValue();
boolean b=bObj.booleanValue();
JDK5.0提供了自动装箱和自动拆箱的功能,可以使用以下语句来打包基本数据类型的数据
Integter  iObj=100;
Float fObj=3.14f;
boolean b=true;
char c='c';
在进行编译时,编译器自动根据语句判断是否进行自动装箱动作。总之,可以将int、boolean、byte、short、char、long、float、double 8中基本数据类型,分别转换为相应的包装类型Integter、Boolean、Byte、Short、Character、Long、Float或Double。
也可以直接使用以下语句,将包装类对象中所包装的数据提取出来。
int  i=iObj;
float  f=fObj;
boolean b=bObj;
char c=cObj;
可见,自动装箱和自动拆箱能使基本类型和包装类之间的混合运算变为合法。在赋值时,基本类型和包装类之间直接赋值,不需要做任何转换;在运算时,也可以进行自动装箱与拆箱。例如:
Integter i=10;
System.out.println(i+10);
System.out.println(i++);
上述过程如下:
编译器会自动的进行装箱和拆箱,首先,10会被自动的装箱,然后在i+10时会先拆箱,进行加法运算;i++该行也是先拆箱在进行递增运算。
还可以使用更为一般化的java.lang.Number类来进行拆箱操作。例如:
Number number=3.14f;
//.314先会被自动装箱为Float,然后指定给number。
具体例子:
class Score
{
float getScore(Float score)
{
return score;
}
}
public class WrapPrim {


public static void main(String[] args) {
float x,y;
Score o1,o2;
o1=new Score();
o2=new Score();
x=o1.getScore(96.f);
y=o2.getScore(73.2f);
System.out.println("x="+x+",y="+y);


}


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

Java自动装箱和自动拆箱 的相关文章

  • CMake 简介

    cmake是kitware公司以及一些开源开发者在开发几个工具套件 VTK 的过程中所产生的衍生品 后来经过发展 最终形成体系 在2001年成为一个独立的开放源代码项目 其官方网站是www cmake org 可以通过访问官方网站来获得更多
  • (杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(8)

    1005 0 vs 1 双端队列暴力模拟 时间复杂度为O n T 首先预处理0的右边第一个0的下标 1的右边第一个1的下标 0的左边第一个0的下标 1的左边第一个1的下标 然后进行模拟 如果当前是zero的轮次 那么就看双端队列的两端 如果
  • 数据结构与算法基础知识(1)

    文章概述 数据结构的定义与分类 逻辑结构 物理结构 数据结构的定义 数据结构就是关系 是数据元素之间存在的一种或者多种特定关系的集合 数据结构分为两类 a 逻辑结构 b 物理结构 逻辑结构 数据对象中数据元素之间的相互关系 物理结构 数据的
  • 前端防止按钮被多次重复点击

    多次重复点击会造成前端显示出bug 需要判断去过滤掉重复多次的点击 这个有好多种方法 逻辑是不管点几次 间隔一定时间才会去触发一次 只产生一次的记录 也就是弄个定时器 最直接的方法就是等每次点击过后等所有操作结束后释放变量 但是这个太麻烦了
  • 音频应用处理器性能benchmark

    我的书 购买链接 京东购买链接 淘宝购买链接 当当购买链接 处理器类别 1 Analog Devices SHARC Blackfin SigmaDSP 2 TI c55 c67x c66x 3 ARM cortex M4 M7 corte
  • python 时间和日期[time 和 calender模块]

    Python 程序能用很多方式处理日期和时间 转换日期格式是一个常见的功能 Python 提供了一个 time 模块可以用于格式化日期和时间 时间间隔是以秒为单位 每个时间戳都以自从1970年1月1日0 0 0 开始计时的 Python 的
  • Android 实现点击输入框以外的区域隐藏软键盘

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 效果图如下 代码实现如下 首先创建一个工具类InputMethodUtil public class InputMethodUtil 隐
  • 【ML】机器学习模型的 10 个评估指标

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Ant Design Pro学习记录—ModalForm的使用(二)

    目录 一 ModalForm高度设置 二 ModalForm点击阴影背景 不隐藏弹框 三 ProFormSelect联动 四 ProFormText关联赋值 一 ModalForm高度设置 在modalProps中设置bodyStyle h
  • 华为OD机试 Python 【平均值最大子数组】

    题目 任务 你需要从一个有N个正数的列表里面找一个子列表 这个子列表的长度应该至少为L 而且它里面的数字要使几何平均值尽量大 我们需要你告诉我们这个子列表是从哪个位置开始的 以及它的长度 怎么判断哪个子列表最好 首先看几何平均值谁大 谁就好
  • springboot war打包步骤

    packaging的设置
  • centos7-elk之安装kibana

    下载解压安装包 安装elasticsearch6 0 1之后 下载kibana6 0 1 tar包 存放地址 opt elk 解压tar包 tar zxvf kibana6 0 1 修改配置文件 vim opt elk kibana6 0
  • BDD、KITTI、Cityscapes和Foggy Cityscapes百度云链接

    BDD 链接 https pan baidu com s 1gtUZGV 8X4L3Fe3PtCAxjw 提取码 vfoj KITTI 链接 https pan baidu com s 1EPEV z185GV8t RE48lROA 提取码
  • 为老人和残障人士“铺路搭桥”,这家银行是认真的

    一场疫情改写了银行业的规则 街道被封闭 城市空无一人 那个肃杀的冬季已经离我们远去 但对刚成立不久的小型银行来说 这是一场近乎致命的打击 裕民银行正是其中一员 这是江西省第一家 全国第18家民营银行 根据监管要求 民营银行只能采取 一行一店
  • kd树

    参考 1 统计学习方法 李航 2 https baike baidu com item kd tree 2302515 fr aladdin 3 http www jianshu com p ffe52db3e12b 4 http blog
  • error: device unauthorized.This adb server's $ADB_VENDOR_KEYS is not set

    以为是个复杂问题 百度之后将自己的手机屏幕解锁打开之后就成功连接上了 同样出问题的小伙伴可以看看是不是接口的问题 或者开发者模式没有打开
  • python中global用法实例分析

    lobal语句是适用于当前整个代码块的声明 它是全局变量的标识符 如果某名字在局部名字空间中没有定义 就自动使用相应的全局名字 没有global是不可能手动指定一个名字是全局的 在 global 中出现的名字不能在global 之前的代码中
  • 包裹快递

    包裹快递 背景 小K成功地破解了密文 但是乘车到X国的时候 发现钱包被偷了 于是无奈之下只好作快递员来攒足路费去Orz教主 描述 一个快递公司要将n个包裹分别送到n个地方 并分配给邮递员小K一个事先设定好的路线 小K需要开车按照路线给的地点
  • 记录几款vue的Tree树形控件

    一 Vue Beauty url https fe driver github io vue beauty components tree 特色 找了很多个框架 只有Vue Beauty是带连接线的 刚好项目能用上 二 iView url
  • Redis分布式锁原理及go的实现

    业务背景 后台定时任务刷新Redis的数据到数据库中 有多台机器开启了此定时同步的任务 但是需要其中一台工作 其他的作为备用 提高可用性 使用Redis分布式锁进行限制 拿到锁的机器去执行具体业务 拿不到锁的继续轮询 分布式锁原理 分布式锁

随机推荐

  • MindSpore【课程作业经验】基于TextCNN文本情感分类

    基于TextCNN文本情感分类 在本次实验中我们用mindspore实现TextCNN的针对aclImdb情感分类任务 数据加载 在这里基于TextCNN的方法我们需要指定文本句子长度 并且对句子进行处理 留下字母和空格其余符号删去 标定标
  • 深度学习神经网络中隐藏层的作用

    在神经网络中 隐藏层是介于输入层和输出层之间的一层或多层神经元组成的层级结构 隐藏层的存在是为了增强神经网络的表达能力和学习能力 以下是为什么神经网络中需要隐藏层的几个原因 非线性建模 隐藏层通过引入非线性变换 可以帮助神经网络对非线性关系
  • 3.2 Qt的moc机制

    转自 http www hellotongtong com Qt5base1 qtmoc intro html 3 2 Qt的moc机制 免费下载源码和PPT课件 在线视频课程 csdn 在线视频课程 51cto 好文章 来自 福优学苑 音
  • linux下Oracle服务的启动和关闭

    1 前言 确保我们能够访问oracle数据库包含两部分 一个是oracle实例 一个是监听 两个同时开启 我们才能正常的使用数据库 因此我们在关闭和启动oracle服务时 也需要同时操作实例和监听 能够操作linux的工具有很多 如 xsh
  • (中文详解篇)smallpt: 99行代码完成全局光照Path Tracing

    目录 0 什么是SmallPT Features 1 光线追踪需要了解知识 1 1 什么是全局光照 1 2 渲染方程 2 SmallPT代码分析 2 1 代码块1 2 2 代码块2 2 2 1 主函数第1步 设置呈像平面 2 2 2 主函数
  • MySQL数据库之基础查询语句(DQL数据查询语句)

    目录 一 查询条件 1 where子句 2 like模糊查询 二 查询结果处理 1 设置查询列 2 列的计算 3 as字段取别名 4 distinct 消除重复 5 函数 6 分组查询group by 7 排序 order by 8 分 查
  • ctf.show萌新_web1

    web1 id 100 or id 1000 就是用一个id小于999的来进行验证 然后再给他一个1000的值进行判断 web2 相同的原理 直接为 id 100 id 1000 web3 id 100 id 1000 web4 id 10
  • 初试讯飞星火认知大模型

    现在大模型忒火 chatGPT要翻要美刀很麻烦 bing new免费用起也不错 不过也要爬楼梯 国产的讯飞星火开放体验了 赶紧申请一下 很快就通过了 给了4个任务 1 写一首关于南山文峰塔的诗 要求含夜景描述 有点口水打油诗的味道 2 讲解
  • 产生java.lang.NullPointerException报错的原因

    产生java lang NullPointerException报错的原因 java lang NullPointerException 异常产生原因 public class Test public static void main St
  • Vue中created和mounted详解

    目录 一 生命周期概念 二 浏览器渲染过程 三 生命周期中的浏览器渲染 beforeCreate阶段 created阶段 beforeMount阶段 mounted阶段 四 使用场景 五 常见相关问题 一些页面跳转后 一些基础数据接口没有重
  • @Autowired 自动注入的service 对象为null

    问题 在controller层新加一个接口 调用自动注入的service对象操作数据库 发现service对象为null 排查 奇了怪了 同在一个controller里 其他接口怎么都正常 当然网上一顿找 发现有如下几种可能 当使用 Aut
  • 兆易创新2022数字芯片笔试题

    1 如下图assertion 请问图示波型哪个周期可以判定success 如图所示 本条断言的意思大体是 EN信号高电平有效 等到A上升沿的时候 其前一个周期 B 成立 等待0个周期 B C 成立 等待1个周期 D为1的过程中 B C 语句
  • 如何删除linux系统下的非空目录

    标题 如何删除linux系统下的非空目录 删除目录的常用shell命令为 rm rm 是一个用于删除文件和目录的命令行实用程序 与 rmdir命令不同 rm 可以删除空目录和非空目录 rmdir命令是什么的知识点补充在最下边 默认情况下 在
  • CMake中使用get_target_property判断Target是否存在

    使用Cmake的add custom target建立自定义的Target后 必须将这个Target加入all依赖 否则生成的Makefile不会执行这个Target的内容 这样会有个问题 如果需要编译如下目录 目录下有N个目录 这些目录下
  • gRPC那点事

    什么是 gRPC gRPC gRPC Remote Procedure Call 是一种高性能 开源的远程过程调用 RPC 框架 它允许分布在不同计算机上的应用程序能够像调用本地方法一样进行通信 从而实现了在分布式系统中进行高效的通信 传统
  • 手把手教你搭建Scala开发环境 步骤详细

    个人主页 csdn春和 推荐专栏 JavaWeb专栏 从入门到实战超详细 本期文章 搭建Scala开发环境 如果对您有帮助还请三连支持 定会一 一回访 本文目录 一 Scala开发环境搭建 1 1 安装scala 1 2 scala插件安装
  • scala学习-12-scala读取java项目下Src目录下的properties文件

    1 概述 scala读取java项目下Src目录下的properties文件 package scala import java util Properties import java io FileInputStream import s
  • springbootweb请求响应

    web三层架构流程 先是前端传送一个请求给后端 然后controller层接受数据进行处理 传给service层进行逻辑处理再交给dao层 dao层访问数据库 数据库再返回数据给dao层 然后再传给service层处理 最后回到contro
  • ResourceUtils

    ResourceUtils org springframework util ResourceUtils 从资源路径获取文件 判断字符串是否是一个合法的 URL 字符串 static boolean isUrl String resourc
  • Java自动装箱和自动拆箱

    基本类型的包装类 在java中 每一种基本类型都有一个对应的包装类 这些类都在java lang包中 8种基本数据类型所对应的包装类是byte Byte short Short int Integter long Long char Cha