当前位置: 首页 > news >正文

【Java】数组

数组是一种用于存储同类型数据的容器结构,其存储规则需遵循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];

这里的 数据类型 可以是基本数据类型(如 intdoubleboolean 等),也可以是引用数据类型(如 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。

相关文章:

  • Vlan初级实验
  • 漏洞知识点《PHP数组绕过深入解析》
  • go语言的包使用,以及错误处理
  • 亚马逊Prime Day新算法曝光,2025年流量分配机制大调整
  • numpy学习笔记10:arr *= 2向量化操作性能优化
  • 菜鸟之路Day24一一前端工程化(一)
  • 数据开发岗笔试题>>sql(hive) ,excel [2025]
  • 【论文阅读】实时全能分割模型
  • 分布式唯一ID生成算法——MongoDB ObjectId 算法
  • C#使用SnsPictureBox.dll绘制点,线段、圆、折线、多边形、测量尺等多种图形。
  • Elasticsearch 介绍:分布式搜索与分析引擎
  • 基于Babylon.js的Shader入门之五:让Shader支持法线贴图
  • Hyperlane:Rust 生态中的轻量级高性能 HTTP 服务器库,助力现代 Web 开发
  • SQL Server 触发器
  • Python中的列表:全面解析与应用指南
  • uniapp配置代理解决跨域问题
  • PyTorch入门指南:环境配置与张量初探
  • 您对下列文件的本地修改将被合并操作覆盖XXXXX请 在 合 并前 提 交 或贮 藏 您 的 修 改
  • Mac:Ant 下载+安装+环境配置(详细讲解)
  • 2025年渗透测试面试题总结-某四字大厂实习面试复盘 二面(题目+回答)
  • 刘非任中共浙江省委常委、杭州市委书记
  • 农贸美学、业态再构、智能管理,今天的菜市场不止有菜
  • 上海车展的“老头乐”,又升级了
  • 杭州发布最新“独角兽企业”榜单,“六小龙”中5家已晋级
  • 2025全球智慧城市指数排名揭晓,阿布扎比跃升至第五位
  • 建投读书会·东西汇流|东西方戏剧在上海的相逢、交锋与融合