尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java 数组全套精讲(定义、初始化、默认值、遍历、Arrays工具类、引用机制、方法传参)2026.7.11

Java 数组全套精讲(定义、初始化、默认值、遍历、Arrays工具类、引用机制、方法传参)2026.7.11
📅 发布时间:2026/7/12 2:43:50

一、数组概述

数组是同一数据类型的有序集合,在内存中占用连续的存储空间,属于引用数据类型。

数组一旦创建,长度不可改变。

定义格式:

int[] a;(推荐)

int a[];(不推荐,兼容C语言写法)

二、数组三种初始化方式

1. 静态初始化简写

直接赋值,自动确定数组长度

int[] arr = {1,2,3,4};

2. 标准静态初始化

支持先声明后赋值

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

3. 动态初始化(仅开辟空间)

只指定数组长度,系统自动赋默认值

int[] arr = new int[10];

三、数组默认初始化值

动态初始化后,数组元素自动赋值:

  • byte、short、int →0

  • long →0L

  • float →0.0f

  • double →0.0d

  • char →\u0000(空字符,不可见)

  • boolean →false

  • 所有引用类型 →null

四、数组两种遍历方式

1. 普通 for 循环(带下标、可修改元素)

适用场景:需要索引、需要修改数组内容

int[] arr = {10,20,30,40}; for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); }

2. 增强 for 循环 for-each(只读、无下标)

适用场景:只读取数据,代码简洁

缺点:无法获取索引,不能修改原数组元素

public class Main { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; // 示例数组 for(int num : arr){ System.out.println(num); } } }
for (元素类型 变量名 : 数组或集合) { // 循环体 }
  • int num:声明一个临时变量num,类型与数组元素类型一致(此处为int)。
  • : arr:指定要遍历的数组arr。
  • System.out.println(num):在每次循环中打印当前元素的值。

五、Arrays 工具类常用方法

导包:import java.util.Arrays;

1. 数组打印

  • Arrays.toString():打印一维数组

  • Arrays.deepToString():打印多维数组

import java.util.Arrays; public class ArrayPrintExample { public static void main(String[] args) { int[] arr = {1, 2, 3}; System.out.println(Arrays.toString(arr)); int[][] arr2 = {{1, 2}, {3, 4}}; System.out.println(Arrays.deepToString(arr2)); } }

2. 数组排序 sort()

  • 基本类型:默认升序

  • 包装类数组:可自定义排序规则

    int[] arr = {5, 2, 9}; Arrays.sort(arr); // 升序排序 System.out.println(Arrays.toString(arr)); // 输出结果

    降序排序(包装类数组)

    Integer[] nums = {3, 1, 2}; Arrays.sort(nums, (a, b) -> b - a); // 降序排序 System.out.println(Arrays.toString(nums)); // 输出结果
  • 基本类型数组(如int[])只能使用默认的升序排序
  • 降序排序需要使用包装类数组(如Integer[])
  • Lambda表达式(a, b) -> b - a实现了降序比较逻辑

3. 二分查找 binarySearch()

必须先升序排序

找到返回索引,未找到返回:-(插入点)-1

int[] arr = {1,2,3,5,9}; int index = Arrays.binarySearch(arr,5);

4. 数组拷贝

  • copyOf:从头拷贝,可扩容/缩容

  • copyOfRange:区间拷贝(左闭右开)[ )

int[] arr = {1,2,3}; int[] newArr = Arrays.copyOf(arr,5); int[] sub = Arrays.copyOfRange(arr,1,3);

5. 数组填充 fill()

批量给数组赋值

Arrays.fill(arr,8); // 全部填充

Arrays.fill(arr,1,3,6); // 区间填充

6. 数组内容比较

  • equals:比较一维数组内容

  • deepEquals:比较多维数组内容

六、数组引用机制(核心考点)

1. 内存分布

引用在栈,对象在堆

  • 栈:数组引用变量(存堆地址)

  • 堆:数组真实数据(连续空间)

2. 引用特点

  • 一个引用同一时刻只能指向一个对象

  • 一个对象可以被多个引用指向

int[] a = {1,2,3}; int[] b = a; b[0] = 99; // a、b同时变化

3. == 与 equals 区别

  • ==:比较地址(是否同一个数组)

  • Arrays.equals():比较数组内容

4. null 空引用

数组变量 = null:引用不指向任何堆空间

再次访问数组元素 →NullPointerException 空指针异常

七、方法中数组引用的应用(重难点)

核心原理

数组是引用类型,方法传参传递的是地址,不是拷贝。

两大铁律:

  1. 方法内修改数组元素→ 原数组改变

  2. 方法内给形参new新数组→ 原数组不变

场景1:方法内修改数组元素(外部受影响)

public static void change(int[] arr) { arr[0] = 999; // 修改传入数组的第一个元素 } public static void main(String[] args) { int[] nums = {10, 20, 30}; // 原始数组 change(nums); // 传递数组引用,修改原数组 // 此时nums[0]的值变为999 }

场景2:形参重新new数组(外部不受影响)

public class ArrayResetExample { public static void reset(int[] arr) { arr = new int[3]; // 只改变局部引用 arr[0] = 888; } public static void main(String[] args) { int[] originalArray = {1, 2, 3}; System.out.println("调用前: " + Arrays.toString(originalArray)); reset(originalArray); System.out.println("调用后: " + Arrays.toString(originalArray)); } }

场景3:方法返回数组引用

public static int[] getNewArray() { int[] arr = {1, 2, 3}; // 在堆内存中创建数组对象 return arr; // 返回数组的引用地址 }

八、总结

  1. 数组是同类型、定长、连续空间的引用类型;

  2. 三种初始化:简写静态、标准静态、动态初始化;

  3. 基本类型默认0/0.0/false,引用类型默认null;

  4. 普通for带下标可改值,for-each简洁只读;

  5. Arrays类:打印、排序、查找、拷贝、填充、比较;

  6. 引用在栈,对象在堆,多引用共享同一个数组;

  7. 方法传数组传的是地址,改元素影响外部,改引用不影响外部。

相关新闻

  • 离散数学函数概念辨析:单射、满射、双射的3种判定方法与集合论基础
  • yuzu模拟器完全指南:如何在PC上免费畅玩Switch游戏的终极方案
  • 端到端自动驾驶拟人度指标化方案

最新新闻

  • Cloudflare货币化网关:AI应用按需付费访问外部API的完整指南
  • 2026湖北CPPM培训避坑指南:如何辨别机构的靠谱程度? - 企智芯
  • TLA2518 ADC芯片特性与PIC24EP512GU814接口设计详解
  • 基于YOLOv8的无人机红外目标检测系统:低成本实战指南
  • Krea2 ControlNet深度控制网络:AI图像生成的结构精确控制指南
  • 验证码识别:OCR与打码平台实战全解析

日新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号