为什么方法调用后数组的元素为1,2,3,15,5?谢谢

为什么方法调用后数组的元素为1,2,3,15,5?谢谢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class DisCountDemo {
    //定义一个用于修改某个数组元素值的方法
    public void updateArray(int[] a){
        a[3] = 15;
        System.out.println("数组a的元素为:");
        for(int n:a){
            System.out.print(n + "   ");
        }
        System.out.println();
    }
     
     
    public static void main(String[] args) {
        DisCountDemo ad = new DisCountDemo();
        int[] a = {1,2,3,4,5};
        System.out.println("方法调用前数组a1的元素为:");
        for(int n:a){
            System.out.print(n + "  ");
        }
        System.out.println();
        ad.updateArray(a);
        System.out.println("方法调用后数组a1的元素为:");
        for(int n:a){
            System.out.print(n + "  ");
        }
         
         
    }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
一叶知秋519 2017-08-03 09:43:36

你好!updateArray方法中有个a[3]=15的赋值语句,当主方法中调用updateArray方法后,就把原数组中a[3]的值改变了;数组的赋值是从a[0]开始,所以调用方法后显示数组元素就变为了1,2,3,15,5。

祝学习愉快~

  • 提问者 宝慕林7867458 #1
    可是方法调用后的数组是存在于主方法中,为什么值还会改变呢,像5-1。交换方法中讲的应该是不变的啊?还是有些没明白,谢谢
    2017-08-03 16:40:17
  • 一叶知秋519 回复 提问者 宝慕林7867458 #2
    基本数据类型的传值和数组是不同的,数组作为参数时,如果在方法中对数组元素的值做了更改,是会对主方法中定义的数组产生影响的。这是因为:当创建数组a1并初始化时,会在内存中开辟一片空间,a1叫做引用指向数组的第一个元素,而当进行方法调用时,把a1传值给a,也就是a和a1这两个引用都指向或代表了同一个数组,因此在方法中对a的元素的改变,可以影响到主方法中定义的a1。
    2017-08-03 17:27:24
  • 加文斯利 回复 提问者 宝慕林7867458 #3
    因为开辟数组的空间是在堆里的,你要通过数组名这个引用来调用它,引用可以理解为“指向”,它指向了数组空间的首地址。 前两节讲的交换两个数的方法,在使用方法的时候,会真正创建两个临时变量来存放主方法中两个变量的数值;而这节在方法中的参数是数组,使用这个方法的时候并没有真正开辟一个和你主方法中数组一样大的空间来存放一模一样的数据,而是在栈里定义了一个引用变量,指向了主方法中的那个数组,也就是说这个新的引用变量的值等于数组名。
    2017-08-05 09:09:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码