数组知识小结

一、数组基本用法
1.1 什么是数组
数组本质上就是让我们能 “批量” 创建相同类型的变量.
例如:
如果需要表示两个数据,那么直接定义两个变量即可 int a;int b
如果需要表示五个数据,那么也可以照上面的方法定义五个变量。
那么问题来了,如果要创建一万个数据,还要这样一个个的定义吗?
这时候就需要使用数组,帮助我们批量创建。
1.2创建数组
基本语法
/ /动态初始化
数据类型 [ ] 数组名称 = new 数据类型 [ ] { 初始化数据 };

/ /静态初始化
数据类型 [ ] 数组名称 = { 初始化数据 };

代码示例

int[] array = new int[] {1, 2, 3};
int[] array = {1, 2, 3};

注意事项:
①在 Java 中, 数组中包含的变量必须是相同类型。
②静态初始化的时候, 数组元素个数和初始化数据的格式是一致的。

1.3数组的使用

代码示例:获取长度 & 访问元素

int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println("length: " + arr.length); // 执行结果: 3
// 访问数组中的元素
System.out.println(arr[1]); // 执行结果: 2
System.out.println(arr[0]); // 执行结果: 1
arr[2] = 100;
System.out.println(arr[2]); // 执行结果:100

注意事项:
①1. 使用 array.length 能够直接获取到数组的长度。
②使用 [ ] 按下标取数组元素. 需要注意, 下标从 0 开始计数。
③使用 [ ]操作既能读取数据,也能修改数据。
④下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围, 会出现下标越界异常。

代码示例:数组越界

int[] arr = {1, 2, 3};
System.out.println(arr[100]);
// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Test.main(Test.java:4)

抛出了java.lang.ArrayIndexOutOfBoundsException异常. 使用数组一定要谨防下标越界。

代码示例: 遍历数组

所谓 “遍历” 是指将数组中的所有元素都访问一遍, 不重不漏. 通常需要搭配循环语句.

int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 执行结果
1
2
3

二、数组作为方法的参数

2.1 基本用法

代码示例: 打印数组内容

 public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        printArray(arr);
    }
    public static void printArray(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i] + " ");
        }
    }
}
// 执行结果
1
2
3

在这个代码中,int[ ] a 是函数的形参, int[ ] arr 是函数实参.
如果需要获取到数组长度, 同样可以使用 a.length。

2.2 引用类型

什么是引用?
引用相当于一个 “别名”, 也可以理解成一个指针.
创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址

代码示例1:

public static void main(String[] args) {
int num = 0;
func(num);
System.out.println("num = " + num);
}
public static void func(int x) {
x = 10;
System.out.println("x = " + x);
}
// 执行结果
x = 10
num = 0

我们发现, 修改形参 x 的值, 不影响实参的 num 值。

代码示例2:

public static void main(String[] args) {
int[] arr = {1, 2, 3};
   func(arr);
System.out.println("arr[0] = " + arr[0]);
}
public static void func(int[] a) {
a[0] = 10;
System.out.println("a[0] = " + a[0]);
}
// 执行结果
a[0] = 10
arr[0] = 10

我们发现, 在函数内部修改数组内容, 函数外部也发生改变。
此时数组名 arr 是一个 “引用” . 当传参的时候, 是按照引用传参。

针对 int[] arr = new int[]{1, 2, 3} 这样的代码, 内存布局如图:
在这里插入图片描述
接下来我们进行传参相当于 int[] a = arr , 内存布局如图:
在这里插入图片描述
接下来我们修改 a[0] , 此时是根据 0x100 这样的地址找到对应的内存位置, 将值改成 100。
在这里插入图片描述
此时已经将 0x100 地址的数据改成了 100 . 那么根据实参 arr 来获取数组内容 arr[0] , 本质上也是获取 0x100地址上的数据, 也是 100。

总结: 所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值