千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > java不支持哪些数组?

java不支持哪些数组?

来源:千锋教育
发布人:qyf
时间: 2023-03-22 17:51:00 1679478660

  概念

  所谓的数组(Array),就是数据的组合,简单地说就是一个存储容器,里面可以包含多个数据。该容器在内存中开辟了一块连续的存储空间,可以用来保存相同类型的多个数据。给大家举个栗子,下图的这个东西你见过吗?

  有的人说这不是鸡蛋吗?其实壹哥想让你看的是存储这些鸡蛋的”容器“--鸡蛋托!一个鸡蛋托有多个存储格子,每个格子只能存储一个鸡蛋,并且这些格子只能用来存储鸡蛋,不能存储其他的东西。一个鸡蛋托可以存储的鸡蛋数量是有限的,不能无限存储。

  其实Java里的数组就类似于是”鸡蛋托“,数组中存储的数据元素就是一个个的”鸡蛋“。一个数组占据了内存中的一片连续空间,只能存储相同类型的数据,数组有一定的存储空间。我们在创建数组时,需要先声明数组的类型,之后该数组中只能存储指定类型的数据。

  ●我们把存储在数组中的每一个数据,称为”数据元素“。这些数据元素会按着一定的顺序排列存储,并赋予每个数据元素对应的编号。我们可以直接通过编号(索引、下标)的方式来调用指定位置上的数据元素,查找速度会很快。

  ●数组本身是引用类型,但数组中的数据元素可以是任何数据类型,包括基本数据类型和引用数据类型。

  ●数组创建时需要指定一个名称,并会在内存中开辟一整块连续的内存空间,数组名引用的就是这块连续空间的首地址(第一个地址)。

  ●数组创建后,长度一旦确定,就不能再被修改。

  java支持的数组

  1.基本类型数组:包括 boolean、byte、short、char、int、long、float 和 double 类型的数组。

  2.引用类型数组:包括任何类、接口、数组类型的对象的数组。

  java不支持的数组

  1.C/C++ 中的指针数组,因为 Java 中没有指针。

  2.多维变长数组,例如 C/C++ 中的动态二维数组。在 Java 中,多维数组的每个维度的大小必须在定义时确定,且在程序运行时无法改变。

  3.超过 JVM 堆空间大小限制的大型数组。Java 数组的最大大小受 JVM 堆空间大小的限制。如果尝试创建一个超过 JVM 堆空间大小限制的数组,则会引发 OutOfMemoryError 异常。

  4.Java不支持泛型数组

  java为什么不支持泛型数组

  Java不支持泛型数组是由于以下两个原因:

  1.类型擦除

  在Java中,泛型使用类型擦除来实现。在编译时,所有泛型类型都会被替换为它们的限定类型或Object类型,因此在运行时无法获得泛型类型的信息。这意味着在创建泛型数组时,编译器无法确切知道数组元素的类型。例如,以下代码无法编译:

  List[] arr = new List[10];

  因为编译器无法确定List在运行时的类型。

  2.安全性

  如果Java允许泛型数组,那么可能会导致类型安全问题。例如,假设以下代码可以编译:

  List[] arr = new List[10];

  Object[] objArr = arr;

  objArr[0] = new ArrayList();

  String s = arr[0].get(0); // ClassCastException

  由于数组是协变的,因此我们可以将一个数组赋值给另一个数组,但是在这个例子中,我们把一个ArrayList赋值给一个List[],这样就破坏了类型安全,因为我们可以在编译时避免类型错误,但在运行时会抛出ClassCastException异常。

  为了避免这些问题,Java禁止使用泛型数组。如果需要创建泛型容器,可以使用集合框架,例如List、Set和Map。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT