目录
一、数组的基本概念
1、数组的定义
数组可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。这就类似于商场里的储物柜。
2、一维数组
2.1、一维数组的创建及初始化
2.1.1、一维数组的创建
//数据类型[] array=new 数据类型[N];
1.array代表数组名,可任取。
2. N代表一维数组中所存储元素的个数
2.1.2、一维数组的初始化
数组的初始化主要分为动态初始化以及静态初始化。动态初始化是指在创建数组时直接指定数组元素个数。静态初始化是指在创建数组时不直接指定数组元素个数,而是直接罗列具体的元素内容。具体如下:
//动态初始化
int[] array=new int[10];
//静态初始化
int[] array1={1,2,3,4,5};
注意:1、静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
2、以上静态初始化为简写,完整形态还要在=后加上:new 数据类型[]。
3、数组也可以按照如下C语言个数创建,但不推荐
数据类型 array[N]={};
4、静态和动态初始化也可以分为两步,但是省略格式不可以分两步。
//可行
int[] array1;
array1 = new int[10];
//可行
int[] array2;
array2 = new int[]{10, 20, 30};
//不可行
int[] array3;
array3={1,2,3};
5、如果没有对数组进行初始化,数组中元素有其默认值,各数据类型默认值如下:
2.2、一维数组的使用
2.2.1、元素访问
数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素,也可以通过下标对数组进行修改。
int[] array={1,2,3};
System.out.println(array[0]);//1
System.out.println(array[1]);//2
System.out.println(array[2]);//3
array[2]=100;
System.out.println(array[2]);//100
注意:下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。
2.2.2、遍历数组
"遍历" 是指将数组中的所有元素都访问一遍。对于遍历数组,我们通常推荐使用for循环的方法遍历。
public class Main {
public static void main(String[] args) {
int[] array={1,2,3};
int i=0;
for(i=0;i<3;i++){
System.out.println(array[i]);
}
}
}
但是,对于有些情况,我们很难知道数组的元素个数,在这里我们可以用“.length”来获取数组元素个数,如下:
public class Main {
public static void main(String[] args) {
int[] array={1,2,3};
int i=0;
for(i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
此外,我们还可以用 for-each 遍历数组 (for 循环的另外一种使用方式. ):
public class Main {
public static void main(String[] args) {
int[] array={1,2,3};
for(int i:array){
System.out.println(i);
}
}
}
二、基本类型变量和引用类型变量
1、基本类型变量与引用类型变量的区别
基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值。
引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。
int a=5;
int[] array={1,2,3};
上面a是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址。
2、引用变量
public class Main {
public static void main(String[] args) {
int a=10;
func(a);
System.out.println(a);//10
}
public static void func(int a) {
a=100;
}
}
基本变量在以上操作中,值没有改变,但是引用变量会变:
public class Main {
public static void main(String[] args) {
int[] a={1,2,3};
func(a);
System.out.println(a[0]);//100
}
public static void func(int[] a) {
a[0]=100;
}
}
同时,如果进行以下操作,a的地址就是b的地址,也就是说,a与b相同:
public class Main {
public static void main(String[] args) {
int[] a={1,2,3};
int[] b={100,200};
int i=0;
a=b;
for(i=0;i<a.length;i++){//遍历a数组
System.out.print(a[i]+" ");
}
System.out.println();
for(i=0;i<b.length;i++){//遍历b数组
System.out.print(b[i]+" ");
}
}
}
结果如下:
由此,可看出引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该 地址,引用变量便可以去操作对象。
3、null
null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用. null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException.
三、二维数组
二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.
数据类型[][] array=new 数据类型[行][列]{};//基本语法
二维数组的用法和一维数组并没有明显差别, 因此不再赘述.
以上便是本篇全部内容,觉得有帮助的可以一键三连支持一下哦~感谢支持!!!