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

JAVA包装类

一、基本数据类型

1.整型类型:

用于表示整数数值,不包含小数部分。

类型位数取值范围默认值示例
byte8-128 至 1270byte num = 100;
short16-32,768 至 32,7670short num = 5000;
int32-2,147,483,648 至 2,147,483,6470int num = 100000;
long64-2^63 至 2^63-10Llong num = 10000000000L;

2. 浮点类型

用于表示带小数的数值,分为单精度和双精度。

类型位数精度默认值示例
float32约 6-7 位小数0.0Ffloat pi = 3.14F;
double64约 15 位小数0.0double pi = 3.14159;

3. 字符类型

用于表示单个 Unicode 字符,占 16 位。

类型位数取值范围默认值示例
char160 至 65,535'\u0000'char letter = 'A';

 4. 布尔类型

用于表示逻辑值,只有两个取值。

类型位数取值默认值示例
boolean1true 或 falsefalseboolean isReady = true;

二、引用数据类型

引用数据类型(Reference Data Type)是指存储对象引用(内存地址)的类型,与基本数据类型相对。

1. 类(Class)类型

  • 定义:使用 class 关键字创建的自定义类型,包含属性和方法。
  • 示例StringInteger、自定义类(如 PersonCar)。
  • 特点
    • 所有类都继承自 Object
    • 可以实例化对象,通过 new 关键字创建。
    • 支持封装、继承、多态等面向对象特性。

2. 接口(Interface)类型

  • 定义:使用 interface 关键字声明的抽象类型,只包含方法签名(Java 8+ 支持默认方法和静态方法)。
  • 示例ListRunnableComparable
  • 特点
    • 不能实例化,必须由类实现(implements)。
    • 支持多实现(一个类可实现多个接口)。
    • 常用于定义行为规范或回调机制。

3. 数组(Array)类型

  • 定义:存储相同类型元素的容器,长度固定。
  • 示例int[]String[]Object[]
  • 特点
    • 数组本身是对象,继承自 Object
    • 元素可以是基本类型或引用类型。
    • 通过索引访问元素,下标从 0 开始。

三、包装类

包装类(Wrapper Class) 是 Java 为基本数据类型提供的引用类型,用于在需要对象的场景中使用基本类型。它们本质上是基本类型的对象化封装,提供了更多的功能和灵活性。

为什么需要包装类?

泛型限制:Java 泛型只接受引用类型,无法直接使用基本类型。

List<Integer> list = new ArrayList<>();  // 正确,使用包装类 Integer
// List<int> list = new ArrayList<>();  // 错误,不能使用基本类型 int

对象操作需求:基本类型不具备对象的特性(如方法调用、继承),包装类可以提供这些功能。

int num = 10;
// num.toString();  // 错误,基本类型没有方法Integer wrapperNum = 10;  // 自动装箱
String str = wrapperNum.toString();  // 正确,包装类有方法

Java 的 8 个包装类

每个基本类型对应一个包装类,均位于 java.lang 包中:

基本类型包装类父类
byteByteNumber
shortShortNumber
intIntegerNumber
longLongNumber
floatFloatNumber
doubleDoubleNumber
charCharacterObject
booleanBooleanObject

自动装箱与拆箱 

  • 装箱:基本类型 → 包装类
  • 拆箱:包装类 → 基本类型
// 自动装箱
Integer a = 10;  // 等价于 Integer a = Integer.valueOf(10);// 自动拆箱
int b = a;       // 等价于 int b = a.intValue();// 运算时的自动拆箱
int sum = a + 5;  // 等价于 a.intValue() + 5

问题:

1 对象是什么

 对象(Object) 是类的实例,是程序运行时的基本实体。它将数据(属性)和操作数据的方法(行为)封装在一起

对象的本质

  1. 类的实例化:类是对象的模板,对象是类的具体实现。
  2. 数据与行为的封装:对象包含属性(状态)和方法(操作)。
  3. 内存中的实体:每个对象在堆内存中占据独立的存储空间。

对象的组成

1. 属性(Fields/Attributes)

  • 对象的状态数据,也称为成员变量。
  • 例如,Person 类的属性可能有 nameage

2. 方法(Methods)

  • 对象的行为操作,用于访问或修改属性。
  • 例如,Person 类的方法可能有 getName()setAge()

 2 例题1

public class Test {public static void main(String[] args) {Integer a = 100;Integer b = 100;Integer c = 200;Integer d = 200;System.out.println(a == b);    // 输出:trueSystem.out.println(c == d);    // 输出:false}
}

原因:Integer 的缓存机制

Java 为 -128 到 127 之间的 Integer 值提供了缓存(类似字符串常量池)。当使用自动装箱(如 Integer a = 100)时:

  1. 若值在缓存范围内(如 100),直接从缓存中获取同一对象,因此 a 和 b 引用相同。
  2. 若值超出缓存范围(如 200),每次都会创建新对象,因此 c 和 d 引用不同。
  1. a == b 为 true

    • Integer a = 100 和 Integer b = 100 均从缓存获取对象,引用相同。
    • == 比较的是引用地址,因此结果为 true
  2. c == d 为 false

    • Integer c = 200 和 Integer d = 200 分别创建新对象,引用不同。
    • == 比较的是引用地址,因此结果为 false

3 ==

基本类型:比较值是否相等。

int a = 10;
int b = 10;
System.out.println(a == b);  // true(值相等)

 引用类型:比较内存地址是否相等。

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);  // false(地址不同)

 1. 字符串常量池

String s1 = "hello";  // 常量池中的对象
String s2 = "hello";  // 复用常量池中的对象
System.out.println(s1 == s2);  // true(地址相同)String s3 = new String("hello");  // 堆中新对象
System.out.println(s1 == s3);  // false(地址不同)

 2. 包装类的缓存机制

IntegerByteShort 等包装类缓存了部分值(默认 -128 到 127):

Integer a = 100;  // 缓存对象
Integer b = 100;  // 复用缓存
System.out.println(a == b);  // true(地址相同)Integer c = 200;  // 新对象
Integer d = 200;  // 新对象
System.out.println(c == d);  // false(地址不同)

 4 列题2

 

public class Test {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);    // trueSystem.out.println(a2 == b2);    // falseSystem.out.println(a1 == a);     // true(自动拆箱)System.out.println(a2 == a);     // true(自动拆箱)System.out.println(a1.equals(a));System.out.println(a1 == a2);}
}
1. 基本类型比较(a == b
  • == 直接比较值a 和 b 均为 10,结果为 true
2. 自动装箱与缓存(a1 == b1
  • Integer a1 = 10 和 Integer b1 = 10 触发自动装箱,调用 Integer.valueOf(10)
  • 缓存机制Integer 缓存 -128 到 127 的值,因此 a1 和 b1 引用同一对象,结果为 true
3. 显式创建对象(a2 == b2
  • new Integer(10) 强制创建新对象,无论值是否在缓存范围内。
  • a2 和 b2 是不同对象的引用,结果为 false
4. 包装类与基本类型比较(a1 == a 和 a2 == a
  • 自动拆箱a1 和 a2 被拆箱为 int 值(通过 intValue())。
  • 最终比较的是 10 == 10,结果为 true
5. equals() 比较值:无论包装类对象是通过缓存还是 new 创建的,只要值相同,结果即为 true
6. == 的本质:比较引用地址,而非对象内容。
http://www.xdnf.cn/news/358597.html

相关文章:

  • YOLOv8目标检测性能优化:损失函数改进的深度剖析
  • SPDK NVMe of RDMA 部署
  • DNS DDoS攻击:网络世界中的“洪水猛兽”
  • Spring框架(1)
  • 双端口ram与真双端口ram的区别
  • COASWT区域海-气-浪耦合模式
  • SEMI E94-0200 PROVISIONAL SPECIFICATION FOR CONTROL JOB MANAGEMENT(控制作业管理暂行规范)
  • 从零打造企业级Android木马:数据窃取与远程控制实战
  • 从概念表达到安全验证:智能驾驶功能迎来系统性规范
  • golang -- 如何获取变量类型
  • uniapp-商城-47-后台 分类数据的生成(通过数据)
  • Eclipse SWT 1 等比缩放
  • 菜鸟之路Day30一一MySQL之DMLDQL
  • 常见降维算法分析
  • C++进阶--红黑树的实现
  • .NET高频技术点(持续更新中)
  • 适老化洗浴辅具产业:在技术迭代与需求升级中重塑银发经济新生态
  • Vue——Axios
  • 通信协议选型篇:如何根据项目需求选择合适的通信协议?
  • 线段树:数据结构中的超级英雄
  • kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)——事务详解及代码实例)
  • 一、对linux驱动文件编写时结构认识与记录
  • A* (AStar) 寻路
  • 读取传感器发来的1Byte数据:分低位先行和高位先行的处理方法
  • 【iptables】--命令基本使用
  • Web 架构之数据读写分离
  • 配置Java Selenium Web自动化测试环境
  • 5.0.5 变换(旋转、缩放、扭曲)
  • 云手机解决方案
  • 图像匹配导航定位技术 第 11 章