一、数组基本用法
1.数组的意义
数组就是让我们能 “批量” 创建相同类型的变量。
注意:在java中数组中包含的变量必须是相同类型。
2.创建数组
基本语法如下:
//动态初始化
数据类型 []数据名称 = new 数据类型 [长度] {初始化数据};
//静态初始化
数据类型 []数组名称={初始化数据};
代码如下:
int [] arr=new int[5]{1,2,3,4,5};
int [] arr={1,2,3,4,5};
注意:静态初始化的时候, 数组元素个数和初始化数据的格式是一致的。
3.数组的使用
(1)使用[ ],按下标取数组元素,下标从0开始。
(2)使用[ ]既能读取数据也能修改数据。
(3)下标访问的有效范围为[0,length)
(4)arr.length是用来计算数组arr的长度的,.这个操作符为成员引用操作符。
代码示例如下:
int []a=new int[5]{1,2,3,4,5};
System.out.println(a.length);
//执行结果为5
System.out.println(a[0]); //1
System.out.println(a[1]); //2
a[4]=10;
System.out.println(a[4]); //10
遍历数组:将数组中的元素都遍历一遍,“不重不漏”。我们常用的方法是利用循环。代码示例:
int [] arr={1,2,3};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
//运行结果
//1
//2
//3
除了循环之外遍历数组还有一种for-each的方法,代码如下:
int [] arr={1,2,3};
for(intx:arr){
System.out.println(x);
}
//运行结果
//1
//2
//3
二、数组作为方法的参数
1.基本用法
代码(打印数组的内容 )示例如下:
public static void main(String[] args){
int [] arr={1,2,3};
printArray(arr);
}
public static void printArray(int [] a){
for(int x:a){
System.out.println(x);
}
}
//执行结果
//1
//2
//3
在此代码中int [ ]arr是函数的实参,int [ ]a是函数的形参。
2.引用类型
1.对比参数传内置类型与参数传数组类型
(1)参数传内置类型代码示例如下:
public static void main(String[] args){
int num=0;
func(num);
System.out.println("num="+num);
}
public static void func(int a){
a=10;
System.out.println("a="+a);
}
//运行结果
//num=0;
//a=10;
我们发现, 修改形参 x 的值, 不影响实参的 num 值。
(2)参数传数组类型代码如下:
public static void main(String[] args){
int [] arr={1,2,3};
func(arr);
System.out.println("arr[0]="+arr[0]);
}
public static void func(int [] a){
a[0]=10;
System.out.println("a[0]="+a[0]);
}
//执行结果
//arr[0]=10;
//a[0]=10;
我们发现, 在函数内部修改数组内容, 函数外部也发生改变. 此时数组名 arr 是一个 “引用” 。当传参的时候, 是按照引用传参。
总结: 所谓的 “引用” 本质上只是存了一个地址。Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只 是将数组的地址传入到函数形参中。 这样可以避免对整个数组的拷贝。
三、数组作为方法的返回值
写一个方法,将数组中的每个元素都+2,代码如下图所示:
class Test{
public static void main(String[] args){
int [] a={1,2,3};
int [] output=transform(a);
printArray(output);//3 5 7
printArray(a);//1 2 3
}
public static void printArray(int [] x){
for(int v:x){
System.out.println(x);
}
}
public static void transform(int [] x){
int []ret=new int[x.length];
for(int i=0;i<x.length;i++){
ret[i]=x[i]+2;
return ret;
}
}
}
在此代码中,ret这个数组就作为transform的返回值。并且在这个transform的方法中创建了新的数组,就不会破坏原来的数组了。