数组与方法互操作

数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存指向,所以在进行数组操作的时候,也可以将其通过方法进行处理

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]);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值