java数组

数组
遇到批量数据的存储和操作时,数组比变量更适合
  • 数组的定义和访问
数据类型 []  数组名
数据类型 数组名[]
  1. 数组是什么数据类型,数组的元素就是什么数据类型
  2. 数组的特征是 [ ]
  3. 数组是引用类型
静态初始化数组 :
数据类型 数组名 = new 数据类型[];
数据类型[] 数组名 = {元素1,元素2,元素3.......};
int[] ages = {12,24,36}
右边里存储了一个地址 [I@4c873330 ,每次创建一个数据类型都会是一个新的地址值
把有边的地址值赋值给左边的变量
注:数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型;
  • 数组的元素访问
// 数组名可以找到数组对象的地址,再通过索引就可以定位到具体的元素了
数组名[索引] // 索引 0 --> 长度 - 1
// 索引: 0 1 2
int[] arr = {12, 24, 36}; // 静态初始化
// 1、访问数组的全部数据
System.out.println(arr[0]); // 12
System.out.println(arr[1]); // 24
System.out.println(arr[2]); // 36
// 下面代码没有3索引,会出现ArrayIndexOutOfBoundsException 索引越界异常
// System.out.println(arr[3]);
// 2、修改数组中的数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]); 0
System.out.println(arr[2]); //100

// 3、访问数组的元素个数:数组名.length
System.out.println(arr.length);
// 技巧:获取数组的最大索引: arr.length - 1(前提是数组中存在数据)
System.out.println(arr.length - 1);
int[] arr2 = {};
// arr2[arr2.length - 1]
System.out.println(arr2.length - 1);
  • 数组的遍历
int[] ages = {12, 24, 36};
for (int i = 0; i < ages.length; i++) {
// i的取值 = 0, 1, 2
System.out.println(ages[i]);
}
  • 数组的动态初始化
数组名 = new 数据类型 [ 数组长度 ];
数组元素类型
默认初始值
byte,int,short,long
0
float,double
0.0
char
'\u0000' 空字符
boolean
true/false
引用数据类型
null
  • 数组使用过程中可能出现的问题
public class ArrayDemo03{
public static void main(String[] args){
int[] scores = {32,45,45,76};
System.out.println(scores[5]); // 下标越界
int[] ages = {32,43,444,32,'a'};
System.out.println(ages[4]); // 97 报错
int[] ages1 = {32,43,444,32L};
ages1[2] = 100;
ages[2] = 100L;
System.out.println(ages1[3]); // 报错 32
}
}
注:如果在数组中保存的元素可以自动提升(自动类型转化)为数组自己的类型,那是可以保存的
数组下标越界
  • 数组的执行原理,Java程序的执行原理
int a = 10;
System.out.println(a); // 10
int[] arr = new int[]{11, 22, 33}; // 静态初始化
System.out.println(arr); // 地址
System.out.println(arr[1]); // 22
arr[0] = 44;
arr[1] = 55;
arr[2] = 66;
System.out.println(arr[0]); // 44
System.out.println(arr[1]); // 55
System.out.println(arr[2]); // 66
虚拟机的内存划分为 方法区、栈、堆、本地方法栈、寄存器 这5块区域
方法区 :字节码文件先加载到这里
Random rand = new Random();
Scanner sc = new Scanner(System.in);
:方法运行时所进入的内存区域,由于变量在方法中,所以变量也在这一块区域中
:存储 new 出来的东西,并分配地址。由于数组是 new 出来的,所以数组也在这块区域
总结一下 int a = 10 int[] arr = new int[]{11,22,33} 的区别
a 是一个变量,在栈内存中, a 变量中存储的数据就是 10 这个值。
arr 也是一个变量,在栈中,存储的是数组对象在堆内存中的地址值
  • 多个变量指向同一个数组的问题
public class ArrayDemo2 {
public static void main(String[] args) {
// 目标:认识多个变量指向同一个数组对象的形式,并掌握其注意事项。
int[] arr1 = new int[]{11, 22, 33};
// 把int类型的数组变量arr1赋值给int类型的数组变量arr2
int[] arr2 = arr1;       此时,arr1和arr2的地址值相等
int[] arr3 = new int[]{11, 22, 33};
System.out.println(arr1); // 地址
System.out.println(arr2); // 地址 1 == 2 都不一样
System.out.println(arr3); // 地址 3 不一样
arr2[1] = 99;
System.out.println(arr1[1]);
arr2 = null; // 拿到的数组变量中存储的值是null
System.out.println(arr2);
//System.out.println(arr2[0]);
//System.out.println(arr2.length);
}
}
总结:
两个变量指向同一个数组时,两个变量记录的是同一个地址值。
当一个变量修改数组中的元素时,另一个变量去访问数组中的元素,元素已经被修改过了。
  • 使用增强for循环遍历数组
for (元素类型 变量名 : 要迭代的对象) {
System.out.println(变量名);
}
语法解析:
元素类型是指数组或集合中的元素的类型。
变量名在循环时用来保存每个元素的值。
冒号后面是要遍历的数组或集合的名称。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值