比如一个整形数组,它就是把整数挨个存在依次递增的下标所对应的数组里面,定义一个整形数组 int a[]={0,1,2}; a[0]就是把 0存在里面了,而数组变量则是存储的它的内存地址;
public class 优快云 {
//swap()交换方法
public static void swap(int firstNum,int secondNum) {
int aNumber = firstNum;
firstNum = secondNum;
secondNum = aNumber;
}
public static void swap(int []a) {
int aNumber = a[0];
a[0] = a[1];
a[1] = aNumber;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int []a= {1,2}; //定义一个整形数组,a[0] = 1 ,a[1] = 2;
int firstNum = 1; //定义第一个整形变量firstNum = 1
int secondNum = 2; //定义第二个整形变量firstNum = 2
//向swap()方法里传入两个整形数据变量
swap(firstNum,secondNum); //如果swap方法没有加static关键字,那么这里调用要出错,具体原因后面文章探究
System.out.println("调用交换函数后firstNum是" + firstNum);
System.out.println("调用交换函数后secondNum是" + secondNum);
//swap()方法返回类型为空,输出结果是firstNum = 1,secondNum = 2,交换没有发生作用
//向swap()方法里面传入两个数组数据
swap(a);
System.out.println("调用交换函数后a[0]是" + a[0]);
System.out.println("调用交换函数后a[1]是" + a[1]);
//swap()方法返回类型为空,输出结果是a[0] = 2,a[1] = 1,交换发生了
}
}
程序结果是在返回值为空的情况下,数组交换成功,整形变量交换失败,说明数组传的是地址,是引用类型,而变量是值拷贝,只在方法里交换了,交换的是复制的值,而我们实际的值并没有发生交换。讲firstNum换成a[0],secondNum换成a[1],交换也失败,说明a[下表数]存放的是数据而不是地址。
以上就为了说明一个问题,数组存储的是数据的地址。
1. 那么,一共有哪些类型的数组呢
常见的有
整形数组: int [] array;
字符串数组:String [] array;
浮点型数组: Double [] array;
字符数组: char [] array;
…
总结一下,只要有这个类型,这个类型的数组也存在包括,类。
类型 [] 数组名;
2. 数组的声明和初始化
a.数组的声明有几种方法?
b.声明了一个数组,是否一定要初始化?
c.初始化的方法有哪些?
d.哪些初始化后是0,哪些初始化后是null?
对应探索:
声明方式如下(等号之前的都叫声明,如果声明了一个数据类型的常量,内存都会为它开辟一块空间):
类型 [] 数组名; //只声明了,没有进行初始化,在没有初始化前使用会报错
类型 [] 数组名 = new 类型 [数组长度]; //这个数组长度可以是直接的一个整数,也可以是整形常量,它开辟数组空间大小,定死了的。声明并初始化了,整形数据是0,浮点数类型对应的是0.0,boolean 类型默认值是false,类对应的是null,字符串对应的是null,只有字符有点怪,也不报错也没有任何输出,待研究
类型 [] 数组名 = {};//只是声明了数组变量,数组各个对象并没有创出
类型 [] 数组名 = {数据1,数据2 等};//这个毫无疑问,声明并初始化了
(“类型 数组名 [];”这类凡是方括号在数组名后的也可以但不推荐,所有不予讨论)
-a.如果只声明一个数组,没有用的情况下不会报错,可以以后在创建。
-b.两个大类
(1)声明后创建:
类型 [] 数组名;
数组名 = new 类型[数组长度];//or -> 数组名 = new 类型[]{数据1,数据2等};
(2)声明同时创建,
类型 [] 数组名 = new 类型 [数组长度];//or -> 类型 [] 数组名 = {数据1,数据2 等};
这里小结一下,如果要想被创建括号里一定要有东西,要么大括号,要么小括号;创建之后数组长度就定死了,所以使用时要小心越界,可变数组日后分析。
终极大BOSS之Arrays类,下一节专门分析。