A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bushangkoukou 中级黑马   /  2013-5-23 00:38  /  854 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何理解:

数组操作中的传递参数
        **调用的时候,传递是基本类型的值的时候,形参改变对实参没有任何影响。
        **调用的时候,传递是引用类型的地址值的时候,形参改变对实参有直接影响。

这两句话,可否举例说明?

1 个回复

倒序浏览
  1. class  Demo
  2. {
  3.         static int arr[]={56,32,9,5,1};
  4.         static int a=23;//成员变量a
  5.         public static void demo(int a,int[] arr)//这里的a是实参,也是局部变量,跟成员变量a不是同一个
  6.         {       
  7.                 System.out.println("传入的a的值="+a);
  8.                 a=10;//这里改变的是局部变量的a的值,当这个方法执行完后,就在栈内存中释放了
  9.                 System.out.println("重新赋值后的a="+a);

  10.                 System.out.println("arr的值为"+arr);//arr应该为一个地址值
  11.                 System.out.println("数组arr中第一个元素的值arr[0]="+arr[0]);
  12.                 arr[0]=10;//arr可以理解为一个int类型的数组变量,它运算时在栈内存中,而它的值就是所指数组在堆内存的地址值,
  13.                 System.out.println("重新赋值后的arr[0]="+arr[0]);//这里用arr[0]表示的是堆内存中arr这个数组中第一个元素的值,所以如果它改变,数组中的元素的值就会改变


  14.         }
  15.         public static void main(String[] args)
  16.         {
  17.                
  18.                 demo(a,arr);

  19.                 System.out.println("a的值="+a);
  20.                 System.out.println("arr[0]="+arr[0]);//方法结束后,改变的是堆内存中arr[0]的值
  21.         }
  22. }
复制代码
结果:

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马