Javase | 包装类

目录:

    • 1.包装类
      • 1.1 包装类
      • 1.2 包装类的分类
    • 2.思考:为什么要提供8种包装类型?
    • 3.通过访问包装类的常量,获取“最大值”和最小值
    • 4.装箱 和 拆箱:
      • 4.1 装箱
      • 4.2 拆箱
    • 5.Number类:
      • 5.1 Number类的构造方法
      • 5.2 Number类中的方法
    • 6.Integer类、 Double类的构造方法
      • 6.1 Integer构造方法
      • 6.2 Double类的构造方法
    • 7.自动装箱 和 自动拆箱:
      • 7.1 自动装箱
      • 7.2 自动拆箱

1.包装类

1.1 包装类

  • Java中为8种 基本数据类型又对应准备了8种包装类型
  • 包装类属于 引用数据类型
  • 包装类中有六个都是数字对应的包装类,他们父类都是 Number

1.2 包装类的分类

  1. byte类型对应的包装类Byte (父类是Number)

  2. short类型对应的包装类Short (父类是Number)

  3. int类型对应的包装类Integer (父类是Number)

  4. long类型对应的包装类Long (父类是Number)

  5. float类型对应的包装类Float (父类是Number)

  6. double类型对应的包装类Double (父类是Number)

  7. boolean类型对应的包装类Boolean (父类是Number)

  8. char类型对应的包装类Character (父类是Number)

包装类引用数据类型

2.思考:为什么要提供8种包装类型?

  • 因为8种基本数据类型不够用,所以要提供了8种包装类型 (为引用数据类型),满足不同的开发需求

  • 现有以下需求:(使用包装类能满足以下开发需求
    方法中的参数类型Object o (引用数据类型) ,但传入的参数的类型为100(基本数据类型),怎么解决这个问题呢?
    : — 将100封装为“包装类”即可符合参数传入要求,也一样能传入数据

  • 例子如:

    public class IntegetTest01 {public static void main(String[] args) {/*现有以下需求:调用doSome()方法时传入一个数字100(基本数据类型),但doSome()方法要求传入的参数类			 型为: Object obj(引用数据类型),怎么解决这个问题?解: 可以将数字100经过构造“构造方法”包装成“对象”,把这个"对象"作为参数传入到		     doSome()方法中*///把数字100经过“构造方法”包装成“对象”MyInt myInt = new MyInt(100);//将“包装类对象”作为参数来传入到doSome()方法中doSome(myInt);}public static void doSome(Object obj) { //方法参数为: 一个Object对象/*当没重写toString()方法时,底层默认使用的Object类的toString()方法 : 输出对象		      的“内存地址”信息,返回值为String类型如:System.out.println(obj); //com.ximo.nine_11.MyInt@7ef20235建议重写toString()方法*///输出重写了toString()方法的对象 : 输出对象中的数据System.out.println(obj);  // 100}
    }class MyInt {  //自定义的包装类int value;public MyInt() {  //无参构造方法}public MyInt(int value) { //有参构造方法this.value = value;}/*** Object.toString()方法是Object类下有的方法,Object类是所有对象的父类,* 意味着其的子类也能调用toString()方法:** Object.toString()方法 : 输出该对象的”内存地址“信息,返回值为String字符串类型 :* return getClass().getName() + "@" + Integer.toHexString(hashCode());** Object.toString()方法的作用:* 1.将“对象”转换为“字符串”* 2.返回一个对象的“内存地址”信息,返回值为String类型。*///重写toString()方法@Overridepublic String toString() {//返回对象中的数据,返回值类型为String类型return String.valueOf(value);}}
    

3.通过访问包装类的常量,获取“最大值”和最小值

  • 通过访问包装类常量,获取基本数据类型的“最大值”和最小值

       //通过访问“包装类的常量”,获取基本数据类型的“最大值”和“最小值”System.out.println("byte的最小值: "+Byte.MIN_VALUE); //-128System.out.println("byte的最大值: "+Byte.MAX_VALUE); //127System.out.println("short的最小值: "+Short.MIN_VALUE); //32768System.out.println("short的最大值: "+Short.MAX_VALUE); //32767System.out.println("int的最小值: "+Integer.MIN_VALUE); //-2147483648System.out.println("int的最大值: "+Integer.MAX_VALUE); //2147483647//-9223372036854775808System.out.println("long的最小值: "+Long.MIN_VALUE);//9223372036854775807System.out.println("long的最大值: "+Long.MAX_VALUE);System.out.println("float的最小值: "+Float.MIN_VALUE); //1.4E-45System.out.println("float的最大值: "+Float.MAX_VALUE); //3.4028235E38System.out.println("double的最小值: "+Double.MIN_VALUE); //4.9E-324//1.7976931348623157E308System.out.println("double的最大值: "+Double.MAX_VALUE);System.out.println(Boolean.FALSE); //falseSystem.out.println(Boolean.TRUE); //trueSystem.out.println(Character.MIN_VALUE);System.out.println(Character.MAX_VALUE);
    

4.装箱 和 拆箱:

4.1 装箱

  • 装箱: 将“基本数据类型”类型转换为“引用数据类型”。

  • 装箱:创建包装类,将对应的“基本数据类型数据存储到“包装类”中。

    例子如:

            /**将“基本数据类型”类型转换为 “引用数据类型” (装箱)装箱: 创建包装类,将对应的“基本数据类型”数据存储到“包装类”中。*///基本数据类型byte b =12;short s =12;int i =123;long l = 123L;float f = 123.0f;double d =123.0;boolean bl = true;char c = '中';//将“基本数据类型”转换为 “引用数据类型” : 装箱//将数字100转换为Byte包装类型 Byte B = new Byte(b);             //创建 “byte类型” 对应的包装类:    ByteShort S = new Short(s);           //创建 “short类型” 对应的包装类:   ShortInteger I = new Integer(i);       //创建 “int类型” 对应的包装类:     IntegerLong L = new Long(l);             //创建 “long类型” 对应的包装类:    LongFloat F = new Float(f);           //创建 “float类型” 对应的包装类:   FloatDouble D = new Double(d);         //创建 “double类型” 对应的包装类:  DoubleBoolean BL = new Boolean(bl);     //创建 “boolean类型” 对应的包装类: BooleanCharacter C = new Character(c);   //创建 “char类型” 对应的包装类:    Character//输出包装类(引用数据类型)对象//包装类中重写了toString()方法,所以此处输出包装类中存储的"基本数据类型"数据System.out.println(B.toString()); //12System.out.println(S.toString()); //12System.out.println(I.toString()); //123System.out.println(L.toString()); //123System.out.println(F.toString()); //123.0System.out.println(D.toString()); //123.0System.out.println(BL.toString()); //trueSystem.out.println(C.toString());  //中
    

4.2 拆箱

  • 拆箱: 将“引用数据类型”类型转换为“基本数据类型”。

  • 拆箱:调用各自包装类中有的xxxValue()方法输出存储在包装类中的基本数据类型数据

    例子如:

      //基本数据类型byte b =12;short s =12;int i =123;long l = 123L;float f = 123.0f;double d =123.0;boolean bl = true;char c = '中';//装箱Byte B = new Byte(b);Short S = new Short(s);Integer I = new Integer(i);Long L = new Long(l);Float F = new Float(f);Double D = new Double(d);Boolean BL = new Boolean(bl);Character C = new Character(c);//拆箱/*拆箱 : 将"引用数据类型"转换为"基本数据类型"。调用各自包装类中有的xxxValue()方法,输出存储在包装类中的基本数据类型的数据。*/byte b_Unpack = B.byteValue();Short S_Unpack = S.shortValue();Integer I_Unpack = I.intValue();Long L_Unpack = L.longValue();Float F_Unpack = F.floatValue();Double D_Unpack = D.doubleValue();Boolean BL_Unpack = BL.booleanValue();Character C_Unpack = C.charValue();
    

5.Number类:

5.1 Number类的构造方法

public Number()

5.2 Number类中的方法

  • byte byteValue( )
    byte 形式返回指定的数值。

  • double doubleValue( )
    double 形式返回指定的数值。

  • float floatValue( )
    float 形式返回指定的数值。

  • int intValue( )
    以 int 形式返回指定的数值。

  • long longValue( )
    long 形式返回指定的数值。

  • short shortValue( )

short 形式返回指定的数值。

6.Integer类、 Double类的构造方法

6.1 Integer构造方法

  • Integer类的两大构造方法:

    Integer( int value )

    Integer( String s )

  • 例子如:

       //Integer的构造方法//将数字转换为Integer包装类型(int ---> Integer)Integer x = new Integer(100);System.out.println(x); //100//将String类型的数字,转换成Integer包装类型(String ---> Integer)Integer y = new Integer("123");System.out.println(y); //123
    

6.2 Double类的构造方法

  • Integer类的两大构造方法:

    Double( double value)

    Double(String s)

  • 例子如:

       //Double的构造方法//将数字转换为Double包装类型 (double ---> Double)Double x = new Double(1.23);System.out.println(x); //1.23//将String类型的数字,转换成Double包装类型 (String ---> Integer)Double y = new Double("3.14");System.out.println(y); //3.14
    

7.自动装箱 和 自动拆箱:

7.1 自动装箱

  • JDK1.5之后,支持“自动装箱”。

  • 自动装箱:将基本数据类型数据自动转换为包装类类型 (引用数据类型)。

       //自动装箱//100基本数据类型//int类型数据 - 自动转换为 -> Integer(包装类)Integer x = 100; //等于同于: Integer x =new Integer(100);
    

7.2 自动拆箱

  • JDK1.5之后,支持“自动拆箱”。

  • 自动拆箱:将包装类类型 (引用数据类型) 自动转换为基本数据类型数据。

  • 当进行算术运算符、赋值运算符等操作时“自动拆箱”。

       	    //自动装箱Integer x = 1000;Integer y = 1000;Object obj = new Object();int a;/**当进行“算术运算符、赋值运算符等”操作时,会”自动拆箱“算术运算符 : + - * / % ++ - -赋值运算符等 : = += -= *= /= %=*///自动拆箱System.out.println(x + 1); System.out.println(x - 1);System.out.println(x * 1);System.out.println(x / 1);System.out.println(x % 1);System.out.println(x++);System.out.println(x--);System.out.println(a=x);System.out.println(a+=x);System.out.println(a-=x);System.out.println(a*=x);System.out.println(a/=x);System.out.println(a%=x);//会报错,因为“引用数据类型”无法赋值给“基本数据类型” (上面就不会报错,因为会“自动拆箱”)System.out.println(a=obj);
    
  • 当进行 “= =” 等操作时不会“自动拆箱”。

       //自动装箱Integer x = 1000;Integer y = 1000;//进行 == 操作时,不会自动拆箱/*当比较基本数据类型时,==比较的是“值”。当比较引用数据类型时,==比较的是“内存地址”。此处打印输出false,表明其比较是“内存地址”,x和y内存地址不相同*/System.out.println(x==y); //false// 此时的 == 比较的是值,所以此处打印输出trueSystem.out.println(1000==1000); //true
    
  • 有了“自动拆箱”之后,Number中的方法(拆箱方法)就用不上了,因为不再需要手动拆箱

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

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

相关文章

Shell编程之定时任务

什么是定时任务 顾名思义,定时任务指的就是在指定/特定的时间进行工作,例如备份/归档数据、清理临时文件等。 在 Linux 中,可以使用 cron 定时器来定期执行任务。cron 是一个在后台运行的守护进程,用于根据指定的时间表自动执行任…

学习笔记|小数点控制原理|数码管动态显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第十集:数码管动态显示

文章目录 1.数码管动态刷新的原理2.动态刷新原理3.8位数码管同时点亮新建一个数组选择每个位需要显示的内容实战小练:简易10秒免单计数器将刷新动作写成函数 课后练习: 1.数码管动态刷新的原理 上述图片引用自:51单片机初学2-数码管动态扫描 用一排端口来…

UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1; …

【echarts】legend长度过长,内容过多导致换行怎么办?

通过设置翻页即可解决该问题 关键代码: type: scroll,// pageFormatter: , // 隐藏翻页的数字pageButtonItemGap: 2, // 翻页按钮的两个之间的间距pageIconColor: #6495ed, // 翻页下一页的三角按钮颜色pageIconInactiveColor: #aaa, // 翻页(即翻页到…

vue三个点…运算符时报错 Syntax Error: Unexpected token

出现以下问题报错: 解决: 在项目根目录新建一个名为.babelrc的文件 {"presets": ["stage-2"] }

docker 部署 node.js(express) 服务

1、在 express 项目根目录下新增 Dockerfile 文件,内容如下: 创建服务容器的方法,可以根据自己的情况选择: 1、以下示例为宿主机没有安装 node 环境的写法; 2、先在本地构建包含 node 和 express 的基础镜像&#xff0…

视频监控/安防监控/AI视频分析/边缘计算/TSINGSEE青犀AI算法智慧仓储解决方案

随着全球经济与科学技术的双重推动,我国的仓储管理已经进入了高速发展时期,物流仓储也由简单的储藏仓库向智能化仓储转变。TSINGSEE青犀AI智慧仓储解决方案是利用先进的信息技术和物联网技术来提高仓储管理效率、降低成本的一种仓储管理模式。 方案功能 …

【Linux学习笔记】基础命令2

1. rmdir指令 && rm指令1.1. 基础概念1.2. 命令用法1.2.1. rmdir命令1.2.2. rm命令1.2.3. rm命令的注意事项 2. man命令3. cp指令3.1. cp指令基础概念3.2. cp命令的用法 4. mv命令5. cat命令6. more命令 && less命令6.1. more命令6.2. less命令 7. head命令和t…

基于springboot+vue的大学社团管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

精简 jre 涉坑记录

主要参考:https://zhuanlan.zhihu.com/p/91496457 主要问题: 1)jre 中有 client 和 server 之分。参考:关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2)对 copy 出来的 rt 进行打 zip 包时&#x…

【算法】反悔贪心

文章目录 反悔贪心力扣题目列表630. 课程表 III871. 最低加油次数LCP 30. 魔塔游戏2813. 子序列最大优雅度 洛谷题目列表P2949 [USACO09OPEN] Work Scheduling GP1209 [USACO1.3] 修理牛棚 Barn RepairP2123 皇后游戏(🚹省选/NOI− TODO) 相关…

哪里可以了解轻量的工作流引擎?

如果想要实现高效率的办公,可以使用轻量的工作流引擎低代码技术平台。随着工作量日益繁重起来,传统的办公制作方式已经无法满足现实需要的,采用轻量级的表格制作工具,就能在无形中缓解办公压力,创造更高效、灵活、优质…

【Java】线程池八股文一

日常工作中有用到线程池吗?什么是线程池?为什么要使用线程池? 作为 JUC 包下的门面担当,线程池是名副其实的 JUC 一哥,不了解线程池,那说明你对 JUC 包其他工具也了解的不咋样吧,对 JUC 没深入…

成绩定级脚本(Python)

成绩评定脚本 写一个成绩评定的python脚本,实现用户输入成绩,由脚本来为成绩评级: #成绩评定脚本.pyscoreinput("please input your score:") if int(score)> 90:print("A") elif int(score)> 80:print("B&…

error:03000086:digital envelope routines::initialization error

项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode,node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…

flask 添加用户认证API , python 客户端用户认证

flask 添加用户认证API , python 客户端用户认证 flask blog 演示项目 Documentation https://flask.palletsprojects.com/tutorial/ 中文Documentation https://flask.net.cn/ 源码 https://github.com/pallets/flask/tree/main/examples/tutorial 修改 auth.py 添加用户…

【Redis】Lua脚本在Redis中的基本使用及其原子性保证原理

文章目录 背景一、Eval二、EvalSHA三、Redis 对 Lua 脚本的管理3.1 script flush3.2 script exists3.3 script load3.4 script kill 四、Lua在Redis中原子性执行的原理 背景 Lua 本身是一种轻量小巧的脚本语言,在Redis2.6版本开始引入了对Lua脚本的支持。通过在服务…

社群团购对接,【概率思维】可以增加你做项目的成功率!

社群团购对接,【概率思维】可以增加你做项目的成功率! 今天来聊一个关于概率的问题,我们不管去做社群团购项目、做流量,还是做销售,我们都要有概率思维,有了这个思维以后,就可以增加你的成功率…

QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能

一、完成登陆界面跳转到聊天室 1> 项目结构 2> 源码 ① .pro ②main #include "mywnd.h" #include"chatCli.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::co…

Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)

目录 一、概述 ( 1 ) 介绍 ( 2 ) 讲述 二、上传 三、下载 四、jrebel的使用 五、多文件上传 给我们带来什么收获 一、概述 ( 1 ) 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能。文件上传是指将本地计算机上的文件上传到服务器端…