当前位置: 首页 > 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. == 的本质:比较引用地址,而非对象内容。

相关文章:

  • 在linux系统中,没有网络如何生成流量以使得wireshark能捕获到流量
  • 复合机器人案例启示:富唯智能如何以模块化创新引领工业自动化新标杆
  • kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)——事务详解及代码实例)
  • Microsoft Azure DevOps针对Angular项目创建build版本的yaml
  • 编译型语言 vs 解释性语言 vs 编译解释语言
  • Missashe考研日记-day36(改版说明)
  • 昂瑞微高性能低功耗2.4G蓝牙芯片HS6621C支持BLE5.1协议主从一体支持语音采样苹果MFI认证寻物标签语音遥控
  • 如何通过C# 获取Excel单元格的数据类型
  • 【C++设计模式之Observer观察者模式】
  • Navicat BI 数据分析功能上线 | 数据洞察新方法
  • (leetcode) 力扣100 9.找到字符串中所有字母异位词(滑动窗口)
  • JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
  • 常见标签语言的对比
  • rabbitmq学习笔记快速使用
  • 商业 |阿里云又丢出了核弹
  • Android SDK
  • JVM、JRE、JDK的区别
  • 【软件工程】软件多缺陷定位方法总结
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据排序操作
  • mysql主从同步
  • 习近平会见缅甸领导人敏昂莱
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 2025世界数字教育大会将于5月14日至16日在武汉举办
  • 甘肃省政府原副省长赵金云被决定逮捕
  • 美英达成贸易协议,美股集体收涨
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教