学了很久的Java,总感觉自己很会,可是越往深处想,越觉得什么也不会。
今天看了一下数组类型,把自己的感觉和体会记录下来,希望能有更多的人看到,并且受益:
在Java中,数组不是基本数据类型,而是引用数据类型,刚从C语言转过来的朋友,可能有点迷茫。我也不知道怎么安慰你,如果你指针学的比较好,相信你会理解的。可以拿数组指针来进行类比:C语言中数组指针和指针数组是不一样的(自己好好查资料,如果有时间,我会在博客中写)。
数组指针的定义是:int (*p)[4];
这个定义就是一个数组指针,由于()优先级比* 的高,所以*和p构成一个指针的定义,指针的变量名为p,int修饰的是数组的内容,即数组中每个元素。
Java定义数组有两种方式:
type[] array_name;
type array_name[];
本质没有差别,第一种比第二种的可读性要好,更加符合变量类型的定义。
数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(我的第一门语言是C语言,所以我在这理解成就是地址变量,说白了就是定义了一个存放地址的变量),这个地址变量还未指向任何有效地内存(比如:C语言中 int *num的定义,里面存放的是地址变量,但是目前还没有具体指向,里面是垃圾数字),因此定义的时候,不能指定数组的长度。由于是引用变量,并未指向任何有效地内存空间,所以还没有内存空间来存储数据元素,也就不能使用,只有对数组进行初始化后才可以使用。
数组的初始化有两种方式:
1、静态初始化:显示的指定每个数组元素的初始值,比如
int [] a = {4,54,5454,232,456};
2、动态初始化:只指定数组的长度,有系统为每个元素指定初始值,比如:
int [] num= new int(5);
动态初始化有系统指定初始值:如果数组类型为,
byte,short,int,long,数组的默认值为0
float,double型的,数组默认值为0.0
char,数组的默认值为'\u0000'
boolean,数组的默认值为false
引用类型(类,接口,数组),数组的默认值为null。
深入了解一下数组:
数组元素和数组变量是分开存放的,数组是一种引用数组类型,数组引用变量这是一个引用。这个引用变量可以指向任何有效地内存,只有当该引用指向有效地内存后,才可以通过数组变量来访问数组元素。
在定义并初始化一个数组后,在内存中分配了两个空间,一个用于存放数组的引用变量,这个变量存储在栈中。另一个用于存放数组本身,在堆内存中。
特别说明一下,Java中没有多维数组,type arrray_name = new tyep[length][]
相当于定义了length个 type[] 类型的变量,当然这些type[] 类型的变量都是数组类型的,因此必须再次初始化这些数组。