Java中数组表示1(一维数组的定义、初始化和内存中数组的表示)

来源:互联网 发布:江西丰城网络问政 编辑:程序博客网 时间:2024/05/23 13:55

各个语言中都有数组,但Java中是有区别的,Java中只有一维数组,没有多维数组,多维数组使用数组的数组来表示的。所以下面介绍的数组主要以一维数组来表示


1.数组的定义

数组类型也是一种类型,本身是一种引用类型,例如int是一个基本数据类型,但是int[]就是一种引用数据类型。其定义方式有两种,分别为:

  • 类型 数组名[];   如:String  arrayName1[];    int arrayName2[];
  • 类型[] 数组名;   如:String[]  arrayName1;    int[] arrayName2;

推荐使用第二种声明方式,因为第二种声明方式具有更好的可读性,对于int[] arrayName方式,很容易可以理解成:定义一个变量arrayName,类型为int[]。


2.数组的初始化

Java在数组声明时并不为数组分配存储空间(不同于其它高级语言),仅有数组声明,而未分配存储空间。Java语言中数组必须先初始化,然后才可以使用。初始化包括数组的内存分配和对数组元素赋初始值。

Java数组的初始化分为两种方式:

  • 静态初始化:数组定义与数组元素的空间分配和赋值操作同时进行。
  • 动态初始化:数组定义与数组元素的空间分配和赋值操作分开进行。

2.1 静态初始化

数组初始化是指在声明数组的同时指定数组元素的初始值。

语法格式如下:arrayName = new type[] {element1, element2, …};

例如:

int[] intArray = new int[]{1, 2, 3, 4, 5};double[] decArray = new double[]{1.1, 2.2, 3.3};String[] strArray = new String[]{"Java", "Android", "FORTRAN"};

静态初始化还有一种简化的数据形式(比上面的方式用的更广泛):

int[] intArray = {1, 2, 3, 4, 5};double[] decArray = {1.1, 2.2, 3.3};String[] strArray = {"Java","Android","FORTRAN"};
注意:如下几种数组初始化方式是不允许的:

int[] intArray = new int[5]{1, 2, 3, 4, 5}; //错误int[5] intArray = new int[]{1, 2, 3, 4, 5}; //错误int[5] intArray = {1, 2, 3, 4, 5}; //错误
数组的长度由程序自动计算,不需要我们手动写。

2.2 动态初始化

为已声明数组(类型  数组名[ ])动态分配空间的一般形式如下:

arrayName = new type[arrayLength];

注:数组大小也称为数组的长度,可以为整型常量或变量。

例如:

int[] value1;value1=new int[10];int[] value2=new int[10]; //声明数组的同时,用new运算符为数组分配空间// int[10] value3 = new int[10];  //错误

2.3 一维数组的访问

一维数组的访问语法如下:

语法:数组[下标]   下标是从0开始的。

int[ ] a = new int[4];a[0] = 20; //访问数组元素并赋值a[1] = a[0] + 10; 
其示意图如下:


注意:访问其他元素会产生数组越界错误,会出现异常:ArrayIndexOutOfBoundsException,如访问a[4]


3.数组的内存表示

为数组分配空间有两种方法:数组初始化使用new运算符;为数组分配空间后,数组变量指向数组存储空间的引用地址。其内存分配的过程如下:

首先,在int i这句话运行完后,在栈(Stack)空间中新建了一个int类型的空间,名称为i,如下:

其次,运行完int[] a这句话之后,只是在占空间中定义了一个int[] 类型的数组,名称为a,如下:

在运行完a=new int[4]后,这样才算在堆(Heap)内存中新建了一个长度为4个int类型数组,如下:

在运行完for循环后,数组的值也进行了重新赋值,如下:





全文完。转载请注明出处。



1 0