JAVA关于数组

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

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(数组名);
posted @   epiphanyy  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-03-22 C++ Primer 学习笔记 第十二章 动态内存
点击右上角即可分享
微信分享提示