数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存指向,所以在进行数组操作的时候,也可以将其通过方法进行处理
1. 引用传递(重点)
数组作为引用数据类型,是可以发生引用传递的,在介绍引用传递之前我们先来看一下数组是怎么开辟内存空间的
(1) 观察一段简单的代码
package com.bittech;
/**
* Author:weiwei
* description:
* Creat:2019/3/22
**/
public class TestArrayDemo {
public static void main(String[] args) {
int[] x = null;
x = new int[3];//初始化一个长度为3 的数组
System.out.println(x.length);
x[0]=10;
x[2]=20;
x[3]=30;//给数组元素赋值
for(int i = 0;i<x.length;i++){
System.out.println(x[i]);//通过循环控制索引下标更改
}
}
}
首先定义了一个空数组x,再将长度设为3,也就是说这时候在 栈内存上存储的是数组名x,堆内存上已经开辟出来了3个内存空间用来存放值,那我们用一张图来描绘一下栈内存和堆内存上数据的分布
引用空间传递:同一块堆内存空间可以被不同栈内存所指向
(2)多个栈内存指向相同的堆内存
package com.bittech;
/**
* Author:weiwei
* description:多个栈内存指向堆内存
* Creat:2019/3/21
**/
public class TestStack0321 {
public static void main(String[] args) {
int [] x = null;
int [] temp=null;//声明对象
x = new int[3];//定义长度
System.out.println(x.length);
x[0] = 10;//第一个元素
x[1] = 20;
x[2] = 30;
for(int i = 0;i<x.length;i++){
System.out.println(x[1]);//通过循环控制索引下标更改
}
temp=x;//引用传递,不出现[]
temp[0]=55;//更改值
System.out.println(x[0]);
}
}
看一下栈内存和堆内存:
同一块堆被不同的栈内存指向
1.方法接收数组
package com.bittech;
/**
* Author:weiwei
* description:数组与方法互操作--方法接收数组
* Creat:2019/3/21
**/
public class TestReceive {
public static void main(String[] args) {
int[] data = new int[]{1,2,3,4,5};
printArray(data);//等价于int[] temp = data;
}
public static void printArray(int[] temp){
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
}
}
2.方法返回数组
package com.bittech;
/**
* Author:weiwei
* description:数组与方法互操作--方法返回数组
* Creat:2019/3/21
**/
public class TestReturn {
public static void main(String[] args) {
int[] data = init();
printArray(data);
}
public static int[] init(){
return new int[] {1,2,3,4,5};//匿名数组
}
public static void printArray(int[] temp){
for(int i =0;i<temp.length;i++){
System.out.println(temp[i]);
}
}
}
3.方法修改数组
package com.bittech;
/**
* Author:weiwei
* description:数组与方法互操作--方法修改数组
* Creat:2019/3/21
**/
public class TestModify {
public static void main(String[] args) {
int[] data = init();
bigger(data);
printArray(data);
}
//定义一个返回数组的方法
public static int[] init(){
return new int[] {1,2,3,4,5};//匿名数组
}
//将数组中每个元素的值扩大5倍
public static void bigger(int[] arr){
for(int i =0;i<arr.length;i++){
arr[i]*=5;//每个元素扩大5倍
}
}
public static void printArray(int[] temp){
for(int i =0;i<temp.length;i++){
System.out.println(temp[i]);
}
}
}