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

Java中的包装类

目录

为什么要有包装类

包装类的作用

基本数据类型和包装类的对应关系

包装类的核心功能

装箱(Boxing)和拆箱(Unboxing)

装箱:

拆箱:

类型转换

字符串<----->基本类型

进制转换

自动装箱与拆箱(Autoboxing)

128陷阱


为什么要有包装类

Java是面向对象编程的,但是基本类型却没有对象,这就会产生矛盾,于是包装类为了解决这一问题应运而生。

包装类的作用

  1. 让基本类型具备对象的特性

    可以参与面向对象的操作(如存入 List、作为方法参数传递)
  2. 提供丰富的工具方法

    类型转换、进制转换、最大值/最小值常量等
  3. 支持泛型

    泛型只能使用对象(如 List<Integer>,不能是 List<int>

基本数据类型和包装类的对应关系

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

包装类的核心功能

装箱(Boxing)和拆箱(Unboxing)

装箱:

基本类型----->包装类对象

Integer num = Integer.valueOf(10); // 手动装箱(推荐)
Integer num2 = 10;                // 自动装箱(Java 5+)

拆箱:

包装类对象------>基本类型

int n = num.intValue(); // 手动拆箱
int n2 = num;          // 自动拆箱

类型转换

字符串<----->基本类型

int num = Integer.parseInt("123");      // 字符串 → int
String s = Integer.toString(123);       // int → 字符串
double d = Double.parseDouble("3.14");  // 字符串 → double

进制转换

String binary = Integer.toBinaryString(10); // 10 → "1010"(二进制)
String hex = Integer.toHexString(255);      // 255 → "ff"(十六进制)

自动装箱与拆箱(Autoboxing)

// 自动装箱(编译后实际调用 Integer.valueOf(10))
Integer num = 10; // 自动拆箱(编译后实际调用 num.intValue())
int n = num; 

128陷阱

Integer num1=100;
Integer num2=100;
System.out.println(num1 == num2);   Integer num3=200;
Integer num4=200;
System.out.println(num3 == num4);	

大家到文章底部猜一下两个输出分别是什么


答案:

truefalse

原因:因为Integer在编译时,会变为 Integer.valueof(),我们看该方法的原码,会发现其是用一个cache数组来存储数据的,如下:

而对于cache数组,我们查看其源码:

发现其大小是-128~127,也就是说,当Integer的值是出于-128~127之间时,会直接使用cache数组中已经存储好的值,再看valueof的原码,当数据是在这个范围外时,就会在堆内存中新开辟一个Integer的空间所以此时num3==num4的值为false


小练习

接下来我们可以继续通过练习来掌握

public static void main(String[] args) {int a = 10;int b = 10;Integer a1 = 10;Integer b1 = 10;Integer a2 = new Integer(10);Integer b2 = new Integer( 10);System.out.println(a == b);		//trueSystem.out.println(a1==b1);		//true,Integer的值在-128~127之间,所以此时用的是cache数组中的值,所以trueSystem.out.println(a2== b2);	//false,a2和b2都是新开辟的Integer对象,所以地址不同,所以falseSystem.out.println(a1 == a);	//true,当包装类用==与基本数据类型比较时,会自动拆箱	System.out.println(a1.equals(a));	//true,此时会自动装箱,与上一个情况类似System.out.println(a1 == a2);	//false,地址不同,a2是新开辟的,a1是cache数组中的System.out.println(a == a2);	//自动拆箱}

总结

特性说明
基本类型转对象使用 valueOf() 或自动装箱
对象转基本类型使用 xxxValue() 或自动拆箱
类型转换parseXxx() 将字符串转为基本类型,toString() 反之
128陷阱== 比较范围受限(-128~127)

相关文章:

  • Knife4j文档的会被全局异常处理器拦截的问题解决
  • 三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据如何解决
  • Edu教育邮箱申请成功下号
  • SSTI模版注入
  • 【日撸 Java 三百行】Day 9(While语句)
  • 让模型具备“道生一,一生二,二生三,三生万物”的现实实用主义能力
  • SPL量化---SMA(算术移动平均)
  • LLM 推理加速:深度解析 Prefilling 与 Decoding 阶段的优化秘籍
  • 全球首套100米分辨率城市与农村居住区栅格数据(2000-2020)
  • Gradio launch() 方法所有参数说明
  • Missashe计网复习笔记(随时更新)
  • python连接sqllite数据库工具类
  • 运维体系架构规划
  • 执梦为楫,共启中医传承新篇
  • SpringAI框架中的RAG知识库检索与增强生成模型详解
  • RAG 技术详解:如何让大模型更 “懂” 知识库?
  • O2O上门服务如何颠覆传统足浴行业?真实案例分析
  • 5 种距离算法总结!!
  • 详解 c++17 重载类 overload的每一条语句,附实例.
  • LintCode1343-两字符串和,1535-转换成小写字母
  • 人民日报刊文:守护“技术进步须服务于人性温暖”的文明底线
  • 工行回应两售出金条发现疑似杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 庆祝上海总工会成立100周年暨市模范集体劳动模范和先进工作者表彰大会举行,陈吉宁寄予这些期待
  • 巴基斯坦称约50名印度士兵在克什米尔实控线丧生
  • 外交部答澎湃:美方攻击抹黑中加关系与合作的卑劣图谋不会得逞
  • 调节负面情绪可以缓解慢性疼痛