目录
- 数组的定义
- 数组的创建及初始化
- 数组的使用
4. 数组是引用类型
- 数组传参
- 数组的定义
- 数组的创建及初始化
2.1 数组的创建
T[] 数组名 = new T[N];
int[] array1 = new int[10];
String[] array2 = new double[3];
2.2 数组的初始化
数组的初始化主要分为动态初始化以及静态初始化
- 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] array1 = new int[10];
- 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
静态初始化可以简写,省去后面的new T[]
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
省略格式不可以拆分,否则编译失败
int[] array3;
array3 = {1,2,3};
- 数组的使用
3.1注意事项
下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常
public class Test {
public static void main(String[] args) {
int[] array = new int[10];
System.out.println(array[10]);
}
}
3.2数组的遍历
循环是最常用的遍历方式
public class Test {
public static void main(String[] args) {
int[] array = new int[10];
for (int i = 0;i < array.length; i++) {
array[i] = i+1;
}
for (int i = 0;i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
先用循环给array赋值,然后循环遍历数组
注意:在数组中可以通过数组对象.length来获取数组的长度
使用 for-each 遍历数组
for-each 是 for 循环的另外一种使用方式,能够更方便的完成对数组的遍历,可以避免循环条件和更新语句写错
for (int x:array) {
System.out.println(x);
}
4. 数组是引用类型
4.1 初始JVM的内存分布
4.2 基本类型变量与引用类型变量的区别
例如:
public static void fun(){
int a = 10;
int b = 20;
int[] array = new int[]{1,2,3,4};
}
我们可以看出,引用变量并不直接存储对象本身,存储的是对象在堆中空间的起始地址
再看一个例子:
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] array2 = {4,5,6,7};
array = array2;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
}
通过地址,引用变量去操作对象
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4};
System.out.println(Arrays.toString(array));
int[] array2 = array;
array2[1] = 10;
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
}
}
我们可以看出,给array2赋值的同时,array的值也改变了
array2这个引用指向了array这个引用指向的对象,因此给array2赋值的同时,array的值也改变
4.3 空引用
public class Test {
public static void main(String[] args) {
int[] array = null;
System.out.println(array[0]);
}
}
- 数组传参
看这块代码:
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4};
fun1(array);
//fun2(array);
System.out.println(Arrays.toString(array));
}
public static void fun1(int[] array){
array = new int[10];
}
public static void fun2(int[] array){
array[0] = 10;
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4};
//fun1(array);
fun2(array);
System.out.println(Arrays.toString(array));
}
public static void fun1(int[] array){
array = new int[10];
}
public static void fun2(int[] array){
array[0] = 10;
}
}
可以看出,这里修改了array的元素