学习笔记 - Java 数组

KoiC / 2023-08-14 / 原文

数组的概述

数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组是有序排列的,且数组属于引用数据类型,但数组中的元素既可以是基本数据类型,又可以是引用数据类型。

数组的存储是在内存中开启一片连续的空间,长度一旦确定就不能修改。

一维数组的使用

声明和初始化

int[] ids; //声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001, 1002, 1003, 1004}; 
//动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5]; //定义长度

int[] arr = {1, 2, 3, 4}; //也是正确的,类型推断

数组的默认初始化值

  • 基本数据类型:

    • 整型:0

    • 浮点型:0.0

    • char 型:0 或 '\u0000' ,而非 '0'

    • boolean 型:false (在内存中也为 0 )

  • 引用数据类型:

    • String 型:null ,非 'null'

数组的内存

数组是一种引用内存,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。

实际的数组对象(即数组元素)被存放在堆内存(heap)中,数组的引用变量(即数组对象)被存储在栈内存中。

在这里插入图片描述

数组对象如果重新赋值,那么数组对象重新指向新的实际数组的地址值。数去引用的旧数组变成垃圾,等待垃圾回收机制回收。具体分析如下图:

在这里插入图片描述

多维数组的使用

声明和初始化

以二维数组为例:

//静态初始化
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
//动态初始化
String[][] arr2 = new String[3][2];
String[][] arr2 = new String[3][]; //列可空,但行不可空

int[][] arr1 = {{1, 2, 3}, {4, 5}, {6, 7, 8}}; //类型推断

二维数组直接使用 lenth 属性时得到的是行数,对某一行使用 lenth 属性时得到的是元素个数(即长度)。

二维数组未初始化时,输出二维数组得到的是内存地址,输出外层元素时也为内存地址,输出内层元素时为 0 。

二维数组的内存结构

image

Arrays 工具类的使用

在 java.util.Arrays 类中包含操作数组的各种方法。

参考

深入浅出Java数组及其内存机制_Duktig丶的博客-CSDN博客