「小颜」java数组的定义和动态数组的操作及内存分配「8」

Java
245
0
0
2023-06-13

Hi,我是小颜在Study,大家晚上好,标题虽然改了,但依然是接着前面的七篇更新,希望喜欢的继续支持,我也会一直更新到学习完。先挑战个一百天。加油!!!!!

第八天学习java

一、数组

①数组的概述:一次性可以存很多相同类型的数据。例如:你的考试成绩,我的java学习全篇。

②是什么:数组(arry)是一种用于存储多个相同类型数据的存储模型。

③数组的定义格式:

数据类型 变量名 [ ]

举例:int arr [ ]

数据类型 [ ] 变量名

举例: int [ ] arr————推荐使用这种

解释: 定义了一个int类型的变量,变量名是arr数组。

④数组的初始化概述:

在java中,数组必须先初始化才能使用。初始化就是一开始给他个值。在数组中就是为数组元素分配内存空间,并为每个数组元素赋值。

分类:动态和静态。

⑤初始化方式——动态

初始化时只指定数组长度,由系统为数组分配初始值。

格式: 数据类型 [ ] 变量名 = new 数据类型 [ 数组长度 ]

举例: int [ ] arr = new int [3] ;

⑥数据元素访问:

(1)数组变量访问方式:

格式:数组名

(2)数组内部保存的数据访问方式

格式: 数组名[索引]

解释: 索引就是数组的每个元素对应的编码,计算机都是从零开始,到结束。例如 定义了长度为 3,那么它的索引就是 0 、 1、 2 。

(3)索引是数据中数据的编号方式:

特征:索引是从零开始的,索引是连续的,索引是逐一增加的,每次加一。

⑦内存分配:

(1)在java中,程序运行为了使效率变高,java就对空间进行不了不同的区域划分。每片区域都有特定的处理数据方式和内存管理模式。

(2)具体分配:

int [ ] arr = new int [ 3 ] ;

——特点:

左边我们称为栈内存(储存在局部变量,在定义方法中的变量,使用完毕就会消失。)

右边我们称为堆内存(是new出来的实体内存,对象,数组在初始化时,会存储空间添加默认值。 整数 :0 浮点数:0.0 布尔 false 字符:空字符 引用数据类型: null)

Tip:每一个被new出来的东西都有一个地址值,在使用完毕后,只有空闲时才会被java的垃圾回收机制回收。

——所以整个流程模式是这样的:

int [ ] arr = new int [ 3 ] ;

arr 会进行 new int [ 3 ] ;地址访问。这里我们假设为001.。

然后 new int [ 3 ] 也就是001 里面有个三个元素,是我们赋值的,分别为 0 、 1 2 。这是他们对应的索引。

——当我们操作时:

System.out.println(arr); 这里将会输出 arr 访问 001 的地址值

System.out.println(arr [ 1 ] ); 这里将会输出 索引1号对应的值,因为这里没有赋值,所以输出的是0.

System.out.println(arr[ 0 ]); 这里将会输出 索引0号对应的值,因为这里没有赋值,所以输出的是0.

⑧数组内存图(单个数组)

在上面的操作之后。我们可以通过索引赋值。

arr [ 0 ] = 100 ;

arr [ 1 ] = 200 ;

这样原来数组访问对应的索引是零就变成了现在改的值了。例如:

System.out.println(arr [ 1 ] ); 这里将会输出 索引1号对应的值,因为这里重新赋值了200,所以输出的是200

System.out.println(arr[ 0 ]); 这里将会输出 索引0号对应的值,因为这里赋值了100,所以输出的是100。

⑨多个数组

int [ ] arr = new int [ 2 ]; 
int [ ] arr2 = new int [ 3 ] ; 
System.out.println(arr) ; 
System.out.println(arr[ 0 ]) ; 
System.out.println(arr[ 1 ]) ; 
System.out.println(arr2); 
System.out.println(arr2 [ 0 ]) ; 
System.out.println(arr 2[ 2 ]) ; 
arr [ 1 ] = 100 ; 
arr [ 0] = 200; 
arr2 [ 0 ] = 190; 
arr2 [ 2] = 10; 
System.out.println(arr) ; 
System.out.println(arr[ 0 ]) ; 
System.out.println(arr[ 1 ]) ; 
System.out.println(arr2); 
System.out.println(arr2 [ 0 ]) ; 
System.out.println(arr 2[ 2 ]) ; 

Tip 和当个数组是一样的意思。不懂往上看。

⑩ 多个数组指向同一个地址(相同)

int [ ] arr = new int [3]; 
arr [ 0 ] = 100 ; 
arr [ 1 ] = 200; 
arr [ 2] = 300 ; 
System.out.println(arr); 
System.out.println(arr[ 0 ]); 
System.out.println(arr[ 1 ]); 
System.out.println(arr[ 2 ]); 
 Tip:到这一步和上面讲的都是一样。  
int [ ] arr2 = arr 
arr2 [ 0 ] = 120; 
arr2 [ 1 ] = 90 ; 
 tip:这时,由于指向一样了,这里修改了,那么也就是会变。  
System.out.println(arr 2); 
System.our.println(arr2 [ 0 ] ); 
System.out.println(arr ); 
System.out.println(arr [ 0 ] ); 

这里输出结果:就是arr 和arr2的地址值一样,索引获取的值也一样。