包装类_20

包装类

  • 包装类(Wrapper Classes)是Java中用于将基本数据类型(如 int、char、boolean 等)封装为对象的类
  • 将基本数据类型转换为对象,以便在需要对象的场景中使用(例如集合类)
  • 提供了一些实用的方法(如类型转换、字符串解析等)

主要功能

  • 包装类可以将基本数据类型封装为对象,以便在需要对象的场景中使用(例如集合类)

    Integer num = new Integer(10); // 将 int 封装为 Integer 对象
    

自动拆箱和装箱

  • 从Java 5开始,引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)机制,使得基本数据类型和包装类之间的转换更加方便

  • 自动装箱

    自动装箱实际上是调用了包装类的 valueOf() 方法

    Integer num = 10;
    // 等价于
    Integer num = Integer.valueOf(10);
    
    //valueOf方法的实现  new了一个Integer对象
    public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
    }
    
  • 自动拆箱

    自动拆箱实际上是调用了包装类的 xxxValue() 方法(如 intValue())

    Integer num = new Integer(10);
    int value = num;
    // 等价于
    int value = num.intValue();
    

包装类的常用方法

  1. 构造方法

    Integer num1 = new Integer(10);      // 通过 int 值创建
    Integer num2 = new Integer("20");    // 通过字符串创建
    
  2. 静态方法

    int value = Integer.parseInt("123"); // 字符串 -> int
    Integer num = Integer.valueOf(10);   // int -> Integer
    Integer num2 = Integer.valueOf("20");// 字符串 -> Integer
    
  3. 实例方法

    Integer num = new Integer(10);
    int value = num.intValue();          // Integer -> int
    String str = num.toString();         // Integer -> String
    

包装类应用场景

  • 集合类:集合类(如 ArrayList、HashMap)只能存储对象,不能存储基本数据类型,因此需要使用包装类
  • 泛型:泛型只能使用对象类型,不能使用基本数据类型,因此需要使用包装类
  • 方法参数:如果方法参数需要接受 null 值,可以使用包装类
Object obj=true? new Integer(1):new Double(2.0) //三元运算符为一个整体
System.out,println(obj) //1.0

包装类和String的类型转换

  1. 包装类转换为 String

    • 使用对象的 toString() 方法。

      Integer num = 123;
      String str = num.toString(); // 将 Integer 转换为 String
      System.out.println(str);     // 输出: 123
      
    • 使用 String.valueOf() 方法。

      Integer num = 123;
      String str = String.valueOf(num); // 将 Integer 转换为 String
      System.out.println(str);          // 输出: 123
      
    • 使用字符串拼接

      Integer num = 123;
      String str = "" + num; // 将 Integer 转换为 String
      System.out.println(str); // 输出: 123
      
  2. String 转换为包装类

    • 使用包装类的 valueOf() 方法。

      String str = "123";
      Integer num = Integer.valueOf(str); // 将 String 转换为 Integer
      System.out.println(num);            // 输出: 123
      
    • 使用包装类的 parseXxx() 方法。

      String str = "123";
      int value = Integer.parseInt(str); // 将 String 转换为 int
      Integer num = value;               // 自动装箱:int -> Integer
      System.out.println(num);           // 输出: 123
      
    • 使用包装类的构造函数(已过时)

    • 使用构造函数创建包装类对象会每次都创建一个新的对象,而包装类的 valueOf() 方法通常会利用缓存机制,避免重复创建对象,从而提高性能

      String str = "123";
      Integer num = new Integer(str); // 将 String 转换为 Integer
      System.out.println(num);        // 输出: 123
      

包装类之间的等值对比

  • == 运算符:比较的是对象的引用(内存地址),而不是对象的值

  • equals() 方法:比较的是对象的值-128127

    //重写的equals方法
    public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;
    }
    
  • 包装类与基本数据类型的对比

    • 当包装类和基本数据类型进行等值对比时,Java会自动拆箱(Unboxing),将包装类对象转换为基本数据类型,然后进行比较
    • == 运算符会将包装类对象自动拆箱为基本数据类型,然后比较它们的值
    • a.equals(b) 会将 b 自动装箱为 Integer 对象,然后比较它们的值。
包装类的一些知识点
包装类对象中有一些常用常量和方法,比如Integer中的MAX_VALUE
Character包装类中有一系列判断字符是否为大小写或者为是否为数字、字母或者空格的方法
除了Float 和 Double其他包装类都进行了缓存
其中Boolean:true 和 false
Character:0 到 127
其他包装类都是-128 到 127

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

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

相关文章

攻防世界 hello_pwn WriteUp

WriteUp 题目信息 来源:攻防世界 名称:hello_pwn 分类:Pwn 描述:pwn!,segment fault!菜鸡陷入了深思题目链接: https://adworld.xctf.org.cn/challenges/list解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的64位ELF文件,所以使用64位IDA对该文件进行反汇编。接…

《95%开发者不知道的vue.config.js高阶玩法》手撕Webpack配置链/SSR优化/多页应用,3倍构建效率实战方案

Vue工程化配置指南:vue.config.js深度解析 一、初始化配置文件 在Vue CLI工程根路径下创建配置文件: 项目层级示意: your-project/ ├── src/ ├── public/ ├── package.json └── vue.config.js # 新增配置文件基本模板结构: module.exports = {// 工程化配置区…

ElevenLabs 33 亿美元估值的秘密:技术驱动+用户导向的「小熊软糖」团队丨Voice Agent 学习笔记

图:Emmanuel Ashun / Endeavor大家好,这是 Voice Agent 学习笔记系列的第 23 篇,我是课代表十三🧑‍💻。ElevenLabs 是一家专注于人工智能语音技术的创新公司,致力于重新定义音频体验。凭借其突破性的语音克隆和配音工具,ElevenLabs 正在重塑音频内容创作的未来,让高…

分布式服务幂等性问题如何解决

在分布式系统中解决幂等性问题是保证系统健壮性的关键挑战之一。以下从原理到实践的完整解决方案,涵盖7种核心模式及落地实现细节:一、幂等性问题本质 核心定义:相同请求多次执行对系统状态的影响 = 执行一次的结果 产生场景:网络抖动导致客户端重复提交 服务端超时后重试机…

一图看懂|2025年经济社会发展10大主要任务

一图看懂|2025年经济社会发展10大主要任务

新朋友:线段树

目录认识线段树和他的梦想 实现梦想之有个小身板 实现梦想之一点一点查 实现梦想之一点一点变 实现梦想之一坨一坨查 实现梦想之一坨一坨变 实现梦想之…不,没能力帮你了1. 认识线段树和他的梦想 差分想必大家都认识,它是可以进行区间加与区间减,但是要查询某个区间的和。他…

攻防世界 get_shell WriteUp

WriteUp 题目信息 来源:攻防世界 名称:get_shell 分类:Pwn 描述:运行就能拿到shell呢,真的题目链接: https://adworld.xctf.org.cn/challenges/list解题思路 首先使用DIE对文件进行查壳,发现这是一个64位ELF文件,所以选择使用64位IDA对文件进行反汇编。发现可以直接运行…

分享一个我遇到过的“量子力学”级别的BUG。

你好呀,我是歪歪。 前几天在网上冲浪的时候,看到知乎上的这个话题:一瞬间,一次历史悠久但是记忆深刻的代码调试经历,“刷”的一下,就在我的脑海中蹦出来了。 虽然最终定位到的原因令人无语,对于日常编码也没啥帮助,但是真的是:情景再现 我记得当时我是学习 Concurren…

day:23 python模块——时间,random,string

一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句(2)python对象定义和python语句 (3)模块让你能够有逻辑地组织你的python代码段。 (4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂 (5)模块能定义函数…

实验一:Tableau数据可视化入门

实验目的:1.熟悉TableauDesktop使用方法。2.通过Tableau软件来实现Excel中数据的基本可视化。 实验原理: Tableau是新一代商业智能工具软件,它将数据连接、运算、分析与图表结合在 一起,通过拖放方式创建各种图表。 Tableau产品包括TableauDesktop、Tableauserver、Tableau…

实验二:D3数据可视化基础

实验目的:熟悉 D3 数据可视化的使用方法。 实验原理:D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是 一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实践主要介绍D3一些最基本的使用方法,以及生成一些比较简单的图表。D3 是一个…

PCB的通孔、盲孔、埋孔|元器件的符号和封装

他们的本质都是用来切换的层的通孔:从顶层到底层,可以看到头 盲孔:看不到头的,如图从第一层切换到了第二层 埋孔:顾名思义就是埋进去了,无论从正面还是反面都是看不到的,它是处于内层的原理图就是一个表示符号,封装是元器件具体实物大小,具体形状