Java|Java基础——数组
admin
2023-08-16 02:05:29
0


文章目录

  • 含义
  • 元数据
  • 内存空间
  • 索引、数组大小
  • 创建
    • 先声明后初始化
    • 声明并初始化
    • arr[ ]和arr[ ]{}的区别
  • 打印数组
  • 二维数组

含义 一组类型相同的变量集合,数组属于引用数组类型,所以使用前必须实例化(开辟空间)。
元数据 跟标准Java对象差不多,但它多了一个元数据,用来表示数组大小;
数组最大尺寸是2^32 = 2147483648,但会拿8字节来存储长度等元数据,所以数组大小是Integer.MAX_VALUE-8,
元数据包括:
Class:描述对象类型的类信息的指针。
Flag:描述对象状态的标志集合,包括对象散列码、形状(对象是否是数组)。
Lock:对象同步信息(对象当前是否同步)。
Size:数组大小。
内存空间 简单复习一下,
堆:存储Java对象和数组,动态分配内存空间(因此存取慢)。
栈:存储基本数据类型和对象应用。(数据大小和作用范围明确,存取快,仅次于寄存器,但不灵活。)
Java|Java基础——数组
文章图片

声明了一个名为arr的int类型数组,并给数组赋值[6,3,5],
索引、数组大小 索引是从0开始的。
获取数组长度要通过:
int len = arr.length;

如果试图访问范围以外的元素,会抛出异常:
java.lang.ArrayIndexOutOfBoundsException

创建 数组一旦初始化后,其所占内存空间、数组长度都是不可变的。
先声明后初始化 声明了一个数组,并开辟了相应大小的空间。
这种方式创建的数组,其初始化又称为动态初始化,因为在声明语句中,系统为数组元素分配了默认值。
int[] arr = new int[5]; // 也是new int[5]{}; arr[0]=3; arr[1]=9; System.out.println(Arrays.toString(arr)); String[] arrS = new String[5]; arrS[0]="h"; arrS[1]="e"; System.out.println(Arrays.toString(arrS));

我声明了一个int型数组跟一个String类型的数组,注意到并没有全部初始化,那么默认值会是什么呢:
[3, 9, 0, 0, 0] [h, e, null, null, null]

我们看到打印结果,int的默认是0,String的默认是null,那么就是说默认初始化值跟数组元素的数据类型有关。
声明并初始化 这种方式的初始化又称为静态初始化,因为程序员显式的给每个元素指定初始值了,系统根据元素个数来确定数组长度。
int[] a = new int[]{5, 4, 6, 9, 3, 1, 2, 8, 7, 9, 5};

arr[ ]和arr[ ]{}的区别 我们试着打印一下,两者都像使用默认值来初始化,但实际是什么样的呢?
int[] arr = new int[5]; int[] test = new int[]{};

输出:
[0, 0, 0, 0, 0] []

嗯?怎么区别还挺大,其实没什么神奇或者特别之处,第一个好理解,创建了大小为5的,元素类型是int的数组,默认值都是0,这没问题。
那么第二个呢?
我们看到它没有指定数组大小,因为这种写法,其实就是程序员自己指定数组元素,数组长度则是系统根据数组大小来定的,但我们看到了,没给数组指定有意义的元素,所以打印出来数组不是null,但是也没有东西,而且长度是0。
打印数组 1、
for(int i = 0; i < a.length; i++){ System.out.print(a[i] + ","); }

2、
for(int i : a){ System.out.print(i + ","); }

3、
System.out.println(Arrays.toString(a));

二维数组 不常用,简单说下,其实跟一维数组很多东西都相似的。
int[][] arr = new int[5][3]; // 5行 3列 int[][] arr1 = new int[][]{{5}, {7, 9}, {0, 6, 8}}; // 3行 3列,但不完全是

0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
【Java|Java基础——数组】5
7 9
0 6 8
如果尝试访问arr1[0][1]会抛出异常,提示下标越界。

相关内容

热门资讯

超... 本文目录导航: 超级云计算是什么 怎么做难看的PPT 1、...
谢... 本文目录导航: 请问云主机是什么 云主机有什么好处 具体的教程,谢谢! 云...
w... 本文目录导航: wps是什么意思 ppt的新配置designer和morp...
大... 本文目录导航: 大专学什么专业务工率高? 未来十年务工率最高的几大专业都是...
软... 本文目录导航: 软件技术专升本可以报什么专业 云计算专升本可以报医学吗 ...
云... 本文目录导航: 云计算务工前景 云计算务工方向及前景怎样样 ...
学... 本文目录导航: 学云计算进去无能嘛 云计算技术与运行是干什么的 ...
中... 本文目录导航: 如何了解云计算,中国的云计算产业开展现状如何 云计算未来几...
云... 本文目录导航: 云计算1+x证书含金量 云计算须要考什么证书 ...
云... 本文目录导航: 云计算股票龙头股票有哪些? 普通云计算概念龙头股有哪些?...
大... 本文目录导航: 大专云计算技术运行务工方向 大专毕业证上是物联网,实践学习...
大... 本文目录导航: 大数据云计算有必要升本吗 内蒙古大专云计算技术与运行专业升...
9... 本文目录导航: 99%学霸假期逆袭必看网站 99%学霸假期逆袭必看网站 ...
云... 本文目录导航: 云计算属于哪个专业 云计算属于什么专业 计...
计... 本文目录导航: 计算机二级MSOffice上机操作题及答案 想做一篇关于解...
A... 本文目录导航: AI能否会彻底扭转上流职业市场,如律师、会计师和医师? A...
人... 本文目录导航: 人工智能芯片产业链有哪些? 更多本行业钻研剖析详见前瞻产业...
人... 本文目录导航: 人工智能会带来哪些风险? 或许有一天,人工智能机器人将取代...
a... 本文目录导航: ai智能写作软件哪个好 ai智能写作软件有哪些?ai智能对...
自... 本文目录导航: 自考本科计算机专业难吗 自考计算机专业须要考哪些科目 ...