三分钟带你“手撕”数组

目录

一、什么是数组

1.为什么要使用数组

2.什么是数组

二、数组的基本用法

1.数组的创建

2.数组的初始化

3.初始化后的默认值

4.数组的访问

5.为什么数组的下标不从1开始 

6.遍历数组

三、数组在计算机中的原理

1.基本类型变量与引用类型变量的区别

2.认识 null


一、什么是数组

1.为什么要使用数组

如果我要存三个同学的成绩,那么我会书写如下代码:

public class TestStudent{
public static void main(String[] args){
int score1 = 70;
int score2 = 80;
int score3 = 85;

System.out.println(score1);
System.out.println(score2);
System.out.println(score3);

}
}

那么我们会发现有很多重复的地方,而且很麻烦,每一个都要书写一遍,还不好管理。那有没有一种东西,可以把它们都给装到一个东西里面去,更好的书写并管理它们呢

答:有,那就是数组

2.什么是数组

数组就是把相同类型的变量储存在一个地方里面。它可以大大减少书写的次数,还方便管理。它就像一个车库,都有着自己的代号(也就是下标)可以方便我们管理。

在Java中,如果有六个相同类型的元素,就相当于上图的六个车位。可以看出:

1. 数组中存放的元素其类型相同

2. 数组的空间是连在一起的

3. 每个空间有自己的编号,起始位置的编号为0,即数组的下标。 

那数组要这么使用呢?请继续往下看:

二、数组的基本用法

1.数组的创建

T[] 数组名 = new T[N];

T:表示数组中存放元素的类型

T[]:表示数组的类型

N:表示数组的长度 

int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组
String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组

2.数组的初始化

数组的初始化主要分为动态初始化以及静态初始化。 

1. 动态初始化:在创建数组时,直接指定数组中元素的个数 

int[] array = new int[10];
double[] array2 = new double[5];
String[] arr3 = new String[3];

int[] array4 = new int[]//报错,没有指定元素的个数

 请注意:动态初始化不指定元素个数会报错!

2. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定 

int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hell", "Java", "!!!"};

int[] array1 = new int[10]{0,1,2,3,4,5,6,7,8,9};//报错,指定了元素的个数

 请注意:静态初始化指定元素个数会报错!

静态和动态初始化也可以分为两步,但是省略格式不可以。 

int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10, 20, 30};
//下面报错,注意省略格式不可以拆分, 否则编译失败
 int[] array3;
 array3 = {1, 2, 3};

3.初始化后的默认值

 如果没有对数组进行初始化,数组中元素有其默认值,如下:

如果数组中存储元素类型为引用类型,默认值为null。比如说String或者是数组什么的。

4.数组的访问

数组的内容在内存中是一段连续的空间,下标是从0开始,依次增加,可以通过下标来访问数组的内容。

int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
// 也可以通过[]对数组中的元素进行修改
array[0] = 100;
System.out.println(array[0]);

1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素

2. 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。 

int[] array = {1, 2, 3};
System.out.println(array[3]); // 数组中只有3个元素,下标一次为:0 1 2,array[3]下标越界
// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Test.main(Test.java:4)

5.为什么数组的下标不从1开始 

为什么不从下标1开始呢,数组其实存的是地址,下标是与数组的地址的偏移量,0偏移量也就是无偏移,是数组中第一个的内容。 

6.遍历数组

从上面的代码中可以看到,如果要打印数组中的内容,一个一个sout输出,那就未免太麻烦的,所以我们用一种更加方便的方法:遍历数组。

int[]array = new int[]{10, 20, 30, 40, 50};
    for(int i = 0; i < array.length; i++){
    System.out.println(array[i]);
}

我们通过for循环把数组里面的内容每一个都循环一遍,这种方法方便又快速。 

注意:在数组中可以通过 数组对象.length 来获取数组的长度,有几个元素就是几个元素。 

三、数组在计算机中的原理

1.基本类型变量与引用类型变量的区别

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。 

public static void func() {
int a = 10;
int b = 20;
int[] arr = new int[]{1,2,3};
}

 像上面的代码,a,b这种类型的变量,是直接把值存在内存中。但是arr这种数组的是引用类型,存的是arr的首地址。

从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。有点类似C语言中的指针,但是Java中引用要比指针的操作更简单。 

2.认识 null

null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.

int[] arr = null;
System.out.println(arr[0]);
// 执行结果
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)

 你可以理解为:它为null,地址是0x00000000,但是这个地址不能用,所以不能操作。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值