Java数组

基本用法

定义

数组本质上就是让我们能 “批量” 创建相同类型的变量.
注意事项: 在 Java 中, 数组中包含的变量必须是 相同类型

使用

注意事项: 静态初始化的时候, 数组元素个数和初始化数据的格式是一致的.

// 动态初始化 
数据类型[] 数组名称 = new 数据类型[长度];
// 静态初始化 
数据类型[] 数组名称 = { 初始化数据 };
int arr = new int[3];
int arr1 = {0,0,0};

获取数组长度&访问元素

int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println("length: " + arr.length); // 执行结果: 3
// 访问数组中的元素,通过下标访问
//下标从0开始到arr.length - 1
//超过范围就会抛出java.lang.ArrayIndexOutOfBoundsException 异常
System.out.println(arr[1]);         // 执行结果: 2 
System.out.println(arr[0]);         // 执行结果: 1 
arr[2] = 100; //通过下标修改数据
System.out.println(arr[2]);         //执行结果:100

注意事项
使用 arr.length 能够获取到数组的长度. . 这个操作为成员访问操作 符. 后面在面向对象中会经常用到.
使用 [ ] 按下标取数组元素. 需要注意, 下标从 0 开始计数
使用 [ ] 操作既能读取数据, 也能修改数据.
下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围, 会出现下标越界异常

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

//第一种for循环
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {       
     System.out.println(arr[i]);
}
// 执行结果 1 2 3
//第二种 for-each循环遍历
for (int x : arr) {
    System.out.println(x);
}
// 执行结果 1 2 3

数组作为方法的参数/返回值

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

内存就是指我们熟悉的 “内存”. 内存可以直观的理解成一个宿舍楼. 有一个长长的大走廊, 上面有很多房间. 每个房间的大小是 1 Byte (如果计算机有 8G 内存, 则相当于有 80亿 个这样的房间).
每个房间上面又有一个门牌号, 这个门牌号就称为 地址

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

总结: 所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只 是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

null 在 Java 中表示 “空引用” , 也就是一个无效的引用
注意: Java 中并没有约定 null 和 0 号地址的内存有任何关联.

数组常用方法

Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法.
Arrays.sort(arr); //排序
Arrays.toString(arr);//数组转换为字符串
Arrays.copyOf(arr,arr.length); //深拷贝

二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.

数据类型[][] 数组名称 = new 数据类型 [行数][列数];
数据类型[][] 数组名称 =  { [初始化数据],[数据],[...],.. };  

用法与一维数组大同小异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值