- 1.数组的初始化
- 2.数组的赋值机制
- 数组赋值机制
- JVM内存区域
- 值传递与引用传递
- 3.数组拷贝
- 4.For-Each 循环
- 5.二维数组
- 基本使用
- 内存分析
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar; // 首选的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首选方法
注意: 建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[]风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言
下面是这两种语法的代码示例:
double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法
创建数组的三种方式:
// 数组初始化创建
// 第一种方式,声明并分配空间
double[] scores = new double[5];
scores[0] = 77;
scores[1] = 78;
scores[2] = 99;
scores[3] = 100;
scores[4] = 52;
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
// 第二种方式,分步骤执行
int apples[]; // 声明数组,还没有分配空间
apples = new int[5]; // 分配空间
// 第三种方式,静态初始化
double[] hens = {3, 5, 1, 2.5, 7.8};
for (int i = 0; i < hens.length; i++) {
System.out.println(hens[i]);
}
2.数组的赋值机制 数组赋值机制
数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传达
示例:
// 数组的赋值机制
int[] arr1 = {1,2,3};
int[] arr2 = arr1; // 获得的其实是arr1的地址
System.out.println(arr1);
System.out.println(arr2);
----------------------
输出:(可以看到arr1与arr2的地址是一样的,本质上还是一个数组)
[I@4eec7777
[I@4eec7777
JVM内存区域
值传递与引用传递
值传递:
拷贝值,会新建一个空间
示例:
int n1 = 10; int n2 = n1; n2 = 80;
图示:
引用传递:
拷贝地址,不会新建空间
代码见上文
图示:
3.数组拷贝
for循环遍历拷贝即可:
// 数组拷贝
int[] a1 = {1,2,3};
int[] a2 = new int[arr1.length]; // 开辟一个新的数组空间
for (int i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
for (int i = 0; i < a1.length; i++) {
System.out.println(a2[i]);
}
4.For-Each 循环
JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
语法格式如下:
for(type element: array)
{
System.out.println(element);
}
示例:
int[] dogs = {1,2,3,4,5};
for (int dog : dogs) {
System.out.println(dog);
}
5.二维数组 基本使用
二维数组的基本使用示例:
// 二维数组
int[][] doubleArr = {{1,2,3},{4,5,6},{7,8,9}};
// 双重循环遍历
for (int i = 0; i < doubleArr.length; i++) {
for (int j = 0; j < doubleArr[i].length; j++) {
System.out.println(doubleArr[i][j]);
}
}
动态创建二维数组:
// 动态创建二维数组,这个数组的第一维度没有指定大小,需要动态开辟空间 int[][] arr = new int[3][];内存分析
当我们创建一个二维数组时,它在JVM内存中是这样表示的:



