JAVA关于数组

本文深入解析Java数组特性,包括数组作为引用类型的本质、初始化方法、内存布局及数组操作技巧。涵盖数组声明、初始化、长度获取、遍历及多维数组概念,同时介绍Arrays类的实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组属于引用类型,本质为指针,存的值为地址。在任何类型后加[]都可以生成新的数组类型。

int a[];  //int数组,不推荐这么写
int[] a;  //推荐写法    

整个数组只能存相同类型的值,每个数组元素都相当于一个变量。
数组在声明时,不能指定数组长度,因为数组只是一个指针,没有数组内容存在。
数组初始化时,有两种方法:
1.静态初始化:

类型 变量名 = new 类型[]{内容1,内容2};
类型 变量名 = {};

2.动态初始化:

new 类型[lenght]

会自动将数组内容设置为0(基本类型)或null(引用类型)。

获取数组长度:

int l = 数组名.length;

使用foreach循环遍历数组:

for(类型 变量名 : 数组或集合)
{
	//每循环一次,取数组中的一个值赋给变量名。
}

数组在内存的存放:
每个方法在运行时内存中都有一个方法栈,所有方法中声明的变量(局部变量)都放在对应的方法栈中,方法运行结束时,栈内存自动释放(栈是临时性内存)。因此栈内存不适合存放长期有效的数据。
因此在方法中声明一个数组时如:

int[] a;

实际上是在栈内存中创建了一个存放地址的空间,所以数组刚声明时不能直接使用,否则会报错空指针异常,因为数组声明时本质是一个指针,而它没有指向任何值。这和所有引用变量相同,如果一个引用变量被声明而没指向任何值就使用时,会报错空指针异常。
关于堆,每个JVM只拥有一个堆内存,JVM不退出,堆将一直存在,可以用java -X命令设置最大堆大小和初始大小。当使用静态或动态方式创建数组:

int a = new a[3];
int b = new b[]{1,2,3};

会在堆内存中开辟空间,这和引用变量相同,引用变量的值都存在堆中。JAVA不允许直接操作堆内存,只能通过引用变量来访问。 当数组的引用变量被销毁时,引用变量指向堆中的数据不一定被销毁,由JAVA的后台线程垃圾回收器决定,会在合适的时候回收没有指针指向(被引用)的堆内存。
因为有垃圾回收机制的存在,JAVA管理内存时非常方便,不会出现内存泄漏,提高安全性。内存泄漏的概念是:当分配内存后忘记回收或者收回了不该回收的内存。

多维数组:声明:

int[3][] a;

允许只在最左边的方括号中填值,这样的数组可以使用而不会出现空指针异常,由于声明为动态声明,所以由系统自动赋值,由于int[]是引用类型变量,所以被初始化为null。若此语句在方法中写出,则数组存放在堆内存中,在方法栈中只有一个指向堆内存的地址,之后再赋值时如:

a[1] = new int[]{1,2};

则以上语句中new出来的数组{1,2}在堆内存中,a[1]存放的是新数组在堆中的地址值。

直接打印数组名:

int[] a = new int[3];
System.out.println(a);

输出为:

[I@12345678     //[+数组类型大写+@+8位16进制地址

操作数组的工具类:java.util.Arrays类,使用时需导入:

import java.util.Arrays

java中唯一不需要导入的包为java.lang,其中含有我们熟悉的String类型和System方法。

二分查找:

Arrays.binarySearch(数组名,要查找的值);      //二分法查找数组中的元素,要求数组以排好序,返回值为数组下标。

填充值:

Arrays.fill(数组名,开始的索引,结束的索引,要填充的值);       //把数组的开始到结束的索引的值都填充为指定值,左包右不包。

从数组名得到值:

Arrays.toString(数组名);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值