数组是一种用于存储同类型数据的容器结构,其存储规则需遵循Java语言的隐式转换机制:
1. 类型匹配规则
基本数据类型数组仅允许存储与其声明类型兼容的数据
例如:int数组可存储byte/short/int类型(因存在自动类型提升), 禁止存储boolean/double等不兼容类型。
2. 建议保持数组类型与存储数据的严格匹配
整数序列(如1, 2, 3)应使用int[]存储
浮点数据(如1.1, 1.2)应使用double[]存储
字符串集合(如"aaa", "bbb")应使用String[]存储
一、数据的初始化
静态初始化
完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};,比如:
int[] arr = new int[]{11,22,33};
double[] arr = new double[]{1.1,1.2,1.3};简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,元素4...};,比如:
int[] array = {1,2,3,4,5};
double[] array = {1.1,1.2,1.3};数组的定义和地址值
package arraydemo;
public class Arraydemo1 {
    public static void main(String[] args) {
        int[] numbers = new int[]{1, 2, 3}; // 动态分配与静态赋值结合
// 可简写为:
        int[] numbers2 = {1, 2, 3};
        double[] prices = new double[]{1.2,1.3,1.4,1.5,1.6};    // 创建长度为5的double数组
        boolean[] flags = new boolean[3];   // 布尔数组默认初始化为false
        String[] namesArr = new String[]{"zhangsan","lisi","wangwu"};
        System.out.println(numbers);
        System.out.println(prices);
        System.out.println(flags);
    }
}如果直接输出数组名称,那么就会得到地址值
[I@4eec7777
[D@3b07d329  //D是double类型的
[Z@41629346   //Z是bool类型的
Process finished with exit code 0以[I@4eec7777为例,我们来看一下这个地址值有什么意义呢?
- [ :表示现在打印的是一个数组。
- I:表示现在打印的数组是int类型的。
- @:仅仅是一个间隔符号而已。
- 4eec7777:就是数组在内存中真正的地址值。(十六进制的)
动态初始化
数据类型[] 数组名 = new 数据类型[数组长度];
例如:
int[] arr = new int[30];这里的 数据类型 可以是基本数据类型(如 int、double、boolean 等),也可以是引用数据类型(如 String、自定义类等);数组名 是你为数组取的标识符;数组长度 是一个正整数,表示数组可以存储元素的数量。
动态初始化时,整数类型默认值为:0
小数类型:0.0
布尔类型:false
字符类型:'\u0000'
引用类型:nul
动态初始化和静态初始化的区别
静态初始化:int[] arr = {1,2,3,4,5};
动态初始化:int[] arr = new int[3];
静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。代码较为简洁,但不够灵活。若要改变数组元素的数量,就需要修改代码里的元素列表。
动态初始化:手动指定数组长度,由系统给出默认初始化值。相对灵活,可依据程序运行时的条件来确定数组的长度。例如可根据用户输入的数量来创建数组。
二、使用数组元素
数组元素的访问
数组中的每个元素都有一个唯一的索引,索引是从 0 开始的整数,用于标识数组中元素的位置。通过索引可以访问数组中的特定元素。

数组名[索引];public class ArrayAccessExample {
    public static void main(String[] args) {
        // 静态初始化一个整数数组
        int[] numbers = {10, 20, 30, 40, 50};
        // 访问数组中索引为 2 的元素
        int element = numbers[2];
        System.out.println("索引为 2 的元素是: " + element);
        // 访问数组的第一个元素(索引为 0)
        int firstElement = numbers[0];
        System.out.println("数组的第一个元素是: " + firstElement);
        // 访问数组的最后一个元素
        int lastElement = numbers[numbers.length - 1];
        System.out.println("数组的最后一个元素是: " + lastElement);
    }
}- 
numbers[2]:通过索引 2 访问数组numbers中的元素(也就是第三个数字),此时访问到的值是 30。
- 
numbers[0]:访问数组的第一个元素。
- 
numbers[numbers.length - 1]:由于数组索引从 0 开始,所以数组的最后一个元素的索引是数组长度减 1,通过numbers.length获取数组的长度。
数组的遍历
数组名.fori 即可生成以下代码(这里我使用的是IntelliJ IDEA 2022.3.2):
//使用for循环遍历数组
for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }我这里就可以直接输入arr.fori,之后Tab一下,就会得到上面这个for循环啦!
下面做个小练习,通过遍历来完成数组的求和 :
package arraydemo;
public class arraydemo2 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1, 2, 3, 4, 5,4,3,2};
        int sum=0;
        for(int i=0;i<arr.length;i++){
            sum=sum+arr[i];
        }
        System.out.println(sum);
    }
}数组元素的修改
要修改数组中的元素,同样是通过索引定位到要修改的元素,然后使用赋值语句为其赋予新的值。
数组名[索引] = 新值;public class ArrayModifyExample {
    public static void main(String[] args) {
        // 动态初始化一个整数数组
        int[] scores = new int[5];
        // 为数组元素赋值
        scores[0] = 80;
        scores[1] = 90;
        scores[2] = 75;
        scores[3] = 85;
        scores[4] = 95;
        // 输出修改前数组中索引为 2 的元素
        System.out.println("修改前,索引为 2 的元素是: " + scores[2]);
        // 修改数组中索引为 2 的元素的值
        scores[2] = 88;
        // 输出修改后数组中索引为 2 的元素
        System.out.println("修改后,索引为 2 的元素是: " + scores[2]);
    }
}scores[2] = 88;:将数组 scores 中索引为 2 的元素的值修改为 88。
 
 
                     
            
        













 
                    

 
                 
                    