数组的定义与使用
数组就是存储相同数据类型的一组数据。它有如下特点:
1.数组中存放的数据是一样的
2.数组的空间是连续的
3.每个空间有自己的编号,其实位置的编号为0,即数组的下标
那么在Java里面如何定义一个数组呢?
假设我现在想定义一个整形数组,数组名为arr,那么我可以有如下写法:
int[] arr={1,2,3,4,5,6}; //第一种定义
是不是和C语言的有点区别。在Java中,为了更好的区别变量和数据类型,将方括号放在了数组名的前面,这样的好处是能一眼看出这个变量的类型是什么。而在C语言中定义一个变量是这样的:
int arr[]={1,2,3,4,5,6};
Java这两种写法都支持,但是C语言只支持int arr[]的这种写法。注意:在Java数组的方括号中是不能填写数字来标识有几个元素。那么Java还提供了另外二种种定义方式:
int[] arr=new int[]{1,2,3,4,5,6}; //第二种定义
int[] arr=new int[10]; //第三种定义
使用new关键字来定义数组。通过new关键字,来实例化一个对象。所以Java当中的数组,其实就是一个对象。第一种定义和第二种定义本质是是没有区别的,第一种只是第二种的简写方式。
第三种定义方式是可以在右边的方括号中放入数据的个数,但是他不能通过{}来初始化数据,默认填充的都是0;如图:
在定义数组的时候如果没有初始化,数组空间里面存的值就是默认值:
这里我对boolean类型做了测试,我们看到不初始化的时候它里面默认是填入false。那么我们再对char类型做一下测试如图:
可以看到里面存的是\u0000。
数组的使用
数组的使用和C语言是类似的,都是通过下标去访问,并且是从0数组下标开始:
现在我们想得知这个数组的长度是多少我们可以使用数组名.length来求:
如果我想对数组的某个位置赋值也是通过下标来引用,比如我想把第一个元素也就是数组下标为0的元素改成100:
遍历数组也是非常简单的,结合我们上面的数组操作以及for循环语句就可以实现数组的遍历:
Java中还有一种不一样的for循环遍历方式:
对比两种for循环遍历,我们发现第一种for循环是通过数组下标访问的,第二种for循环遍历数组和下标是没有关系的。
Java为了开发的便利性,提供了很多现成的方法。有专门的一个处理数组的类来帮助我们实现高效的开发,这个类叫Arrays我们尝试一下:
单纯打印数组的话这种方法是最方便的。如果想要精确操作数组的元素还是需要用for循环来自己写逻辑。Arrays里面有很多的方法都很好用,下面在举一个例子排序:
我们使用Arrays.sort这个类方法实现了排序,非常的方便简洁。
数组是引用类型
最后我们说一下引用类型。因为Java数组是一个引用类型的变量。那什么是引用类型呢?
首先我们的了解Java虚拟机的布局。
上面是一个大概的内存布局图,我们知道数组是定义在一个方法内的,那么它是一个局部变量。局部变量是存在栈上的。为什么称之为引用类型呢,因为在栈上数组本身并不存储数据,数组开辟的空间存放的数据是在堆上的,而栈上存储了一个地址,这个地址是指向堆上开辟的数组空间的起始地址。用一个图来理解是这样的:
因此我们可以理解为对数组数据的访问是间接访问的形式,因此也称之为引用类型。