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]); }
|
使用方式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]); }
|
编辑
使用方式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); } } }
|
编辑
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]);
|
值传递与引用传递的区别?
值传递:
1 2 3 4
| //n2的变化,不影响到n1的值 int n1 = 10; int n2 = n1; n2 = 80;
|
1 2 3 4
| //是一个地址,arr2变化会影响到arr1 int[] arr1 = {1, 2, 3}; int[] arr2 = arr1; arr2[0] = 10;
|
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不一样,也就是使它们的空间内存独立了如图: