1.什么是数组?

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。

即:数组就是一组数据

2.数组的使用

使用方式1-动态初始化

数组的定义

数据类型 数组名[] = new 数据类型[大小]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
*循环输入5个成绩,保存到double数组,并输出
*
*/
//1.创建了一个double数组,大小为5
int source[] = new double[5];
//2.循环输入
//source.length 表示数组的大小/长度
Scanner myscanner = new Scanner(System.in);
for(int i = 0;i<sources.length;i++){
System.out.println("请输入第"+(i+1)+"个元素的值");
scores[i] = myScanner.nextDouble();
}
//输出,遍历数组
System.out.println("==数组的元素/值的情况如下:==")
for(int i = 0;i <scores.length;i++){
System.out.println("第"+(i+1)+"个元素的值"+scores[i]);
}

点击并拖拽以移动

img点击并拖拽以移动

使用方式2-动态初始化

1.先声明数组

语法:数据类型 数组名[];也可以 数据类型[] 数组名;

int a[];或者int [] a;

2.创建数组

创建语法:数组名 = new 数据类型[大小];

a = new int[10];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
*循环输入5个成绩,保存到double数组,并输出
*
*/
//1.创建了一个double数组,大小为5
int scores[]; //声明数组,这时scores是null
scores = new double[5]; //分配内存空间,可以存放数据
//2.循环输入
//source.length 表示数组的大小/长度
Scanner myscanner = new Scanner(System.in);
for(int i = 0;i<sources.length;i++){
System.out.println("请输入第"+(i+1)+"个元素的值");
scores[i] = myScanner.nextDouble();
}
//输出,遍历数组
System.out.println("==数组的元素/值的情况如下:==")
for(int i = 0;i <scores.length;i++){
System.out.println("第"+(i+1)+"个元素的值"+scores[i]);
}

点击并拖拽以移动

img点击并拖拽以移动编辑

使用方式3-静态初始化

初始化数组

语法:数据类型 数组名[] = {元素值,元素值,…}

int[] a ={2,3,4,5,6,7,8}

1
2
3
4
5
6
7
8
public class Array02 {
public static void main(String[] args){
double[] hens = {3,5,1,3,4,2};
for(double hen : hens){
System.out.println(hen);
}
}
}

点击并拖拽以移动

img点击并拖拽以移动编辑

1.数组是多个相同类型数据的组合,实现对这些数据的统一管理

1
2
//1.数组是多个相同类型数据的组合,实现对这些数据的统一管理 
int[] arr1 = {1,2,3,4,60,1.1};//double=>int;由于不是自动类型转换;错

点击并拖拽以移动

2.数组中的元素可以是任何数据类型,包括基本数据类型和引用类型,但是不能混用

1
2
//2.数组中的元素可以是任何数据类型,包括基本数据类型和引用类型,但是不能混用 
String[] arr3 = {"北京","烤鸭","好吃"};

点击并拖拽以移动

3.数组创建后,如果没有赋值,有默认值

1
2
3
4
//3.数组创建后,如果没有赋值,有默认值 
//int 0、short 0、byte 0、long 0
//float 0.0、double 0.0、char \u0000、boolean false、String null
short[] arr4 = new short[3];

点击并拖拽以移动

4.数组的下标必须是0开始

5.数组下标必须在指定的范围内使用,否则报:下标越界异常

6.数组属引用类型,数组型数据是对象

3.数组的赋值机制

数组在默认情况下是引用类型,赋的值是地址

1
2
3
4
5
6
7
8
9
10
11
//基本数据类型赋值,赋值方式为值(拷贝)
//n2的变化,不影响到n1的值
int n1 = 10;
int n2 = n1;
n2 = 80;
//数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传递
//是一个地址,arr2变化会影响到arr1
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 10;
System.out.println(arr1[0]);

点击并拖拽以移动

img点击并拖拽以移动

值传递与引用传递的区别?

值传递:

1
2
3
4
//n2的变化,不影响到n1的值 
int n1 = 10;
int n2 = n1;
n2 = 80;

点击并拖拽以移动

img点击并拖拽以移动

1
2
3
4
//是一个地址,arr2变化会影响到arr1 
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 10;

点击并拖拽以移动

img点击并拖拽以移动

4.数组的拷贝

实现数组的拷贝(内容的复制)

将int[] arr1 = {10,20,30};拷贝到arr2数组,要求数据空间是独立的

1
2
3
4
5
6
7
8
9
10
11
//将int[] arr1 = {10,20,30};拷贝到arr2数组
// 要求数据空间是独立的
int arr[] = {10,20,30};
//创建一个新的数组arr2,开辟一个新的数据空间
//大小 arr1.length;
int[] arr2 =new int[arr.length];
//遍历arr1,把每一个元素拷贝到对应的位置
for(int i = 0; i<arr.length;i++){
arr2[i] = arr[i];
System.out.println(arr2[i]);
}

点击并拖拽以移动

解析:

int[] arr2 =new int[arr.length];在堆中重新创建了一个空间,这时使用的空间与arr不一样,也就是使它们的空间内存独立了如图:

img点击并拖拽以移动