欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 【数据结构】包装类和泛型

【数据结构】包装类和泛型

2025/4/19 5:03:02 来源:https://blog.csdn.net/qq_56251766/article/details/147129485  浏览:    关键词:【数据结构】包装类和泛型

【数据结构】包装类和泛型

  • 一、 包装类
    • 1.1 基本数据类型(8个)和对应的包装类
    • 1.2 装箱和拆箱
    • 1.3 自动装箱和自动拆箱
  • 二、 泛型
    • 2.1 泛型的作用
    • 2.2 为什么需要泛型?
    • 2.3 泛型语法

泛型的学习,最重要的是:
知道 泛型的对象是怎么实例化的,关键目的是为了使用 后续的集合类

MyClass<String> obj = new MyClass<>();//泛型类的实例化

一、 包装类

1.1 基本数据类型(8个)和对应的包装类

  1. Java 提供了 8个 基本数据:byte,short,int,long,float,double,char,boolean。
    为了和C语言兼容,引入的一些概念。
  2. 包装类:Java把这些基本类型,都搞一个类,进行包装。把基础类型通过类进一步的封装,叫做包装类。
基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
  1. 后续可以给包装类中提供一些方法,完成一些相关操作。
    比如:使包装类和内置类型之间,相互转换的方法(装箱和拆箱)。

1.2 装箱和拆箱

在这里插入图片描述

1.3 自动装箱和自动拆箱

(1)在使⽤过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,
java 提供了⾃动机制。
在这里插入图片描述

(2)所有的包装类和对应的内置类型都支持这样的操作。

  1. 装箱:内置类型 转换为 包装类
int i = 10;
Integer ii = i; // ⾃动装箱
Integer ij = (Integer)i; // ⾃动装箱,,加上了手动的类型转换
  1. 拆箱: 包装类 ==> 内置类型
int j = ii; // ⾃动拆箱
int k = (int)ii; // ⾃动拆箱,加上了手动的类型转换
  1. 包装类的比较
public class Demo2 {public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);System.out.println(c == d);}
}

在这里插入图片描述

为什么出现这样的结果?

(1)a和b的比较:true

在这里插入图片描述

(2)c和d的比较:false

在这里插入图片描述

二、 泛型

2.1 泛型的作用

  • 在Java这样的语言中,写一个类 / 方法,往往都需要说明里面的成员 / 参数的类型。
  • 但是也有些情况,程序员希望一个类 / 方法,能够同时给 不同类型 提供支持。

比如,写一个add方法,实现两个数相加(两个 int / double / Integer / 数组 类型相加):
前面学习过的方法重载就可以提供这样的支持,但是重载出来的多个方法,代码都差不多,这样的写法比较麻烦。

  • 因此,引入泛型。写一份代码,就可以同时支持多种类型,提高代码的通用性。
  • 日常开发中,很少直接使用泛型;更多的是基础库,基础框架中,广泛得使用泛型。

2.2 为什么需要泛型?

实现⼀个类,类中包含⼀个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员⽅法返回数组中某个下标的值?

思路

  1. 我们以前学过的数组,只能存放指定类型的元素,例如:int[] array = new int[10]; String[] strs = new String[10];
  2. 所有类的⽗类,默认为Object类。数组是否可以创建为Object?

代码实现:

在这里插入图片描述

问题:以上代码实现后,发现:

  • 任何类型数据都可以存放
  • 1号下标本⾝就是字符串,但是确编译报错。必须进⾏强制类型转换
  • 虽然在这种情况下,当前数组任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有⼀种数据类型。而不是同时持有这么多类型。

使用泛型的优点:

  • 代码复用,一份代码,支持多种类型。
  • 自动的进行类型转换,编译过程中也会触发一些类型检查。
    在这里插入图片描述

2.3 泛型语法

  1. 泛型语法
    在这里插入图片描述
  2. 泛型 实例

(1)泛型类定义 实例1:
在这里插入图片描述
(2)实例 2:

class MyArray<T>{//泛型类的定义//private T[] arr = new T[10];//err//T 当前能表示任何类型,new T[] 的时候,就可能会涉及到调用该类的构造方法//而T是什么类型还不知道,无法调用构造方法!// 所以不能写成new T[10]:需要new Object[] 转成 T[]private T[] arr = (T[])new Object[10];public  T get(int index){return arr[index];}public void set(int index,T value){arr[index] = value;}
}public class Demo3 {public static void main(String[] args) {MyArray<String> arr = new MyArray<>();//泛型类的实例化MyArray<Integer> arr2 = new MyArray<>();//MyArray<int> arr3 = new MyArray<>();//err//泛型,在Java底层,是当做“Object”来处理的,int类型当做Object类处理}
}

【泛型语法规则总结】

(1)泛型类的定义(很少会写到)
在这里插入图片描述
(2)泛型类的实例化(经常会用到)
在这里插入图片描述

Java的各种集合类:ArrayList、HashMap都是泛型的,可以保存 String
也可以保存Integer,也可以保存我们自己写的类的对象。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词