1、数组概述
当程序中使用到一系列相同类型的数据时,往往采用数组方式存偖以便于统一管理。数组本身是对象,属引用类型,但数组的元素可以是任意类型,包括基本类型和引用类型。基本维数不同,数组有一维数组、二维数组和多维数组。
2、一维数组
(1)一维数组有两种声明方式:
[list]
[*] 类型 数组名[]
[*] 类型[] 数组名
[/list]
例:
注意在声明的同时定义数组的长度是不允许的,如int a[10] 是非法的。
由于数组是引用类型,在声明时其默认初始值是null。声明其实是在堆上作,将数组名记入堆栈,但并没有给数组分配空间,直到用new 时才真正在堆上开辟空间。可以用旅馆定房间进行比喻:声明相当于向旅馆前台进行定房预约,前台只是将订房者的信息登记下来,并没有进行房间分配。而new时相当于订房者到达酒店,在前台办理入住手续,拿到房匙,真正分配到属于自己的房间。
例:
2、数组的初始化
数组的初始化有动态初始化和静态初始化两种:动态初始化指的是分配空间与赋值是分开的;静态初始化指是的在分配空间的同时进行赋值。
动态初始化:
静态初始化:
数组的引用下标是从0开始的,在赋值或引用时常用length属性判断是否越界。
注意点:由于数组是引用类型,所以[quote]=[/quote] 并不能实现数组之间的赋值,如:
int[] x = { 1,2,3,4,5} ;
int[] y = x ;
由于数组是引用类型,所以这时数值y和x指向相同的堆内存空间,因此改变y数组的值,也就改变了x数组中的值,这是 int[] y = x 相当于给数组取了个别名。
3、二维数组
二维数组使用两个下标,如:
这时a.length指的是数组的维数,而a[i].length指的是第i维数组的个数。如上式中a.length的值为3, 而a[1].length的值为4.
当程序中使用到一系列相同类型的数据时,往往采用数组方式存偖以便于统一管理。数组本身是对象,属引用类型,但数组的元素可以是任意类型,包括基本类型和引用类型。基本维数不同,数组有一维数组、二维数组和多维数组。
2、一维数组
(1)一维数组有两种声明方式:
[list]
[*] 类型 数组名[]
[*] 类型[] 数组名
[/list]
例:
int a[] ;
int[] a;
String[] name;
注意在声明的同时定义数组的长度是不允许的,如int a[10] 是非法的。
由于数组是引用类型,在声明时其默认初始值是null。声明其实是在堆上作,将数组名记入堆栈,但并没有给数组分配空间,直到用new 时才真正在堆上开辟空间。可以用旅馆定房间进行比喻:声明相当于向旅馆前台进行定房预约,前台只是将订房者的信息登记下来,并没有进行房间分配。而new时相当于订房者到达酒店,在前台办理入住手续,拿到房匙,真正分配到属于自己的房间。
例:
int[] a;
a = new int[20];
2、数组的初始化
数组的初始化有动态初始化和静态初始化两种:动态初始化指的是分配空间与赋值是分开的;静态初始化指是的在分配空间的同时进行赋值。
动态初始化:
int[] i;
i = new int[10];
i[0] = 5;
i[4] = 10;
静态初始化:
int[] a = { 2, 4, 6 } ;
数组的引用下标是从0开始的,在赋值或引用时常用length属性判断是否越界。
注意点:由于数组是引用类型,所以[quote]=[/quote] 并不能实现数组之间的赋值,如:
int[] x = { 1,2,3,4,5} ;
int[] y = x ;
由于数组是引用类型,所以这时数值y和x指向相同的堆内存空间,因此改变y数组的值,也就改变了x数组中的值,这是 int[] y = x 相当于给数组取了个别名。
3、二维数组
二维数组使用两个下标,如:
int a[][] = { {1,2}, {3,4,5,6}, {7,8}};
这时a.length指的是数组的维数,而a[i].length指的是第i维数组的个数。如上式中a.length的值为3, 而a[1].length的值为4.