Java 数组总结


前言

提示:本文是我初学Java对数组相关知识的总结,避免之后忘掉一些细节,因为本人有c语言基础,一些过于简单通俗的不会赘述。


一、数组的定义格式

格式1:数据类型[] 数组名; 例:int[] a;
格式2:数据类型 数组名[]; 例: int a[];
(这俩中定义并没有什么区别,格式不同而已,推荐使用前一种。据说后一种是当初为了挖C语言工程师,刻意做出的对c语言的兼容)
注意:
1.Java中的数组必须先初始化,然后才能使用。所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
2.数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,即使没有显示的初始化, 其中的每个元素也被按照实例变量同样的方式被隐式初始化。

二、数组的初始化

1.动态初始化

动态初始化时只指定数组的长度,由系统为数组分配初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度];
举例:int[] a=new int[3];

2.静态初始化

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 数组名 = {数组元素};
举例:int[] a={1,2,3};

三、数组的内存分配

1.在此我通过举例来逐步认识学习数组的内存分配

//定义一个数组
		int[]  a=new int[3];
		//此时输出
		System.out.println(a);
		System.out.println(a[0]);
		System.out.println(a[1]);
		System.out.println(a[2]);

输出a得到的是数组的首地址,输出数组元素时因为我们没有初始化,所以其元素默认为0。

在前边代码基础上继续

int[]   b=new int[3];
//分别输出a,b的地址
System.out.println(a);
System.out.println(b);

a,b的地址显然不等
在这里插入图片描述
那如果这样做呢?

int[] b=new int[3];
System.out.println(a);
System.out.println(b);
//把a赋给b
b=a;
System.out.println(a);
System.out.println(b);

结果如图,在把a赋给b之前a、b地址不相等,而在此之后a、b的地址均等于原来a的地址。实际上,此时a和b指向同一块内存,而b之前指向的地址,由于没有途径可以再次找到,就被系统自动释放掉了。
在这里插入图片描述
a和b指向同一块地址怎么理解?

int[]  a=new int[3];
		//此时输出
		System.out.println(a[0]);
		System.out.println(a[1]);
		System.out.println(a[2]);
		int[] b=new int[3];
		b=a;
		b[0]=123;
		b[1]=456;
		b[2]=789;
		System.out.println(a[0]);
		System.out.println(a[1]);
		System.out.println(a[2]);

同样是输出a数组的元素,在改变b数组的元素的值后,a数组元素的值也发生相应的改变,因为a、b操作的是同一块地址。
在这里插入图片描述

2.内存分配总结

如果输出a[0],a[1],a[2]的地址,会发现,这三个地址并不是连续的且毫无规律。这是因为在Java不向程序员暴漏地址,对地址的调用是完全交给虚拟机的。而在C++中如果输出a[0],a[1],a[2]的地址,则会得到连续的地址,因为C/C++支持指针的使用。
以下是Java内存分配方式总结
在这里插入图片描述


四、数组的特点

1.数组的长度是固定的,被创建后,就不能再次改变
2.java中的数组实际上是对象实例,所以可以用变量初始化长度
例: int a=3; int b=new int[a];
3.数组变量属引用类型,数组即对象,数组中的每个元素即该对象的成员变量。
4.数组中的元素,类型一定是相同的,不可以混合使用。它的元素类型可以是基本类型也可以是引用类型
5.数组索引范围从零到数组长度减一

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值