qidao123.com技术社区-IT企服评测·应用市场

标题: JAVA包装类 [打印本页]

作者: 悠扬随风    时间: 2025-5-10 12:21
标题: 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)范例


2. 接口(Interface)范例


3. 数组(Array)范例


三、包装类

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

泛型限定:Java 泛型只接受引用范例,无法直接利用基本范例。
  1. List<Integer> list = new ArrayList<>();  // 正确,使用包装类 Integer
  2. // List<int> list = new ArrayList<>();  // 错误,不能使用基本类型 int
复制代码
对象操纵需求:基本范例不具备对象的特性(如方法调用、继承),包装类可以提供这些功能。
  1. int num = 10;
  2. // num.toString();  // 错误,基本类型没有方法
  3. Integer wrapperNum = 10;  // 自动装箱
  4. String str = wrapperNum.toString();  // 正确,包装类有方法
复制代码
Java 的 8 个包装类

每个基本范例对应一个包装类,均位于 java.lang 包中:
基本范例包装类父类byteByteNumbershortShortNumberintIntegerNumberlongLongNumberfloatFloatNumberdoubleDoubleNumbercharCharacterObjectbooleanBooleanObject 自动装箱与拆箱 


  1. // 自动装箱
  2. Integer a = 10;  // 等价于 Integer a = Integer.valueOf(10);
  3. // 自动拆箱
  4. int b = a;       // 等价于 int b = a.intValue();
  5. // 运算时的自动拆箱
  6. int sum = a + 5;  // 等价于 a.intValue() + 5
复制代码


问题:

1 对象是什么

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

对象的组成

1. 属性(Fields/Attributes)

2. 方法(Methods)

 2 例题1

  1. public class Test {
  2.     public static void main(String[] args) {
  3.         Integer a = 100;
  4.         Integer b = 100;
  5.         Integer c = 200;
  6.         Integer d = 200;
  7.         System.out.println(a == b);    // 输出:true
  8.         System.out.println(c == d);    // 输出:false
  9.     }
  10. }
复制代码
缘故原由:Integer 的缓存机制

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

基本范例:比力值是否相等。
  1. int a = 10;
  2. int b = 10;
  3. System.out.println(a == b);  // true(值相等)
复制代码
 引用范例:比力内存地点是否相等。
  1. String s1 = new String("hello");
  2. String s2 = new String("hello");
  3. System.out.println(s1 == s2);  // false(地址不同)
复制代码
 1. 字符串常量池
  1. String s1 = "hello";  // 常量池中的对象
  2. String s2 = "hello";  // 复用常量池中的对象
  3. System.out.println(s1 == s2);  // true(地址相同)
  4. String s3 = new String("hello");  // 堆中新对象
  5. System.out.println(s1 == s3);  // false(地址不同)
复制代码
 2. 包装类的缓存机制
Integer、Byte、Short 等包装类缓存了部分值(默认 -128 到 127):
  1. Integer a = 100;  // 缓存对象
  2. Integer b = 100;  // 复用缓存
  3. System.out.println(a == b);  // true(地址相同)
  4. Integer c = 200;  // 新对象
  5. Integer d = 200;  // 新对象
  6. System.out.println(c == d);  // false(地址不同)
复制代码
 4 列题2

 
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         int a = 10;
  4.         int b = 10;
  5.         Integer a1 = 10;
  6.         Integer b1 = 10;
  7.         Integer a2 = new Integer(10);
  8.         Integer b2 = new Integer(10);
  9.         
  10.         System.out.println(a == b);      // true
  11.         System.out.println(a1 == b1);    // true
  12.         System.out.println(a2 == b2);    // false
  13.         System.out.println(a1 == a);     // true(自动拆箱)
  14.         System.out.println(a2 == a);     // true(自动拆箱)
  15.         System.out.println(a1.equals(a));
  16.         System.out.println(a1 == a2);
  17.     }
  18. }
复制代码
1. 基本范例比力(a == b)


2. 自动装箱与缓存(a1 == b1)


3. 显式创建对象(a2 == b2)


4. 包装类与基本范例比力(a1 == a 和 a2 == a)


5. equals() 比力值:无论包装类对象是通过缓存还是 new 创建的,只要值雷同,效果即为 true。

6. == 的本质:比力引用地点,而非对象内容。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4