黑马程序员 总结---> 传递问题

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


先看下面一段程序:

class Chuandi
{
      public static void main(String [] args)
      {
	  int a = 10;
	  int[] m = new int[2];
	  m[0] = 50;
	  m[1] = 100;
	  System.out.println("代入方法前a是 " + a +",m[0]是 "+ m[0] +",m[1]是 " + m[1]);
	  print3x(a);
	  setInts(m);
	  System.out.println("代入方法后a是 " + a +",m[0]是 "+ m[0] +",m[1]是 " + m[1]);
      }		
      static void print3x(int x)
      {
	  x = 3*x;
	  System.out.println("代入方法中3a是 " + x);
      }
      static void setInts(int[] ints)
      {
	  for(int n=0;n<ints.length;n++)
          {
	      ints[n] = 3*(n+2);
	      System.out.println("代入方法中m["+n+"]是 "+ints[n]);
	  }  
      }
}

打印出来的结果是怎么样的呢?代入方法前后的a改变了吗?数组m呢?我们来看看打印的结果:

                                                      

从结果可以看出,方法内部对a的修改改变了a的值,但是a在代入方法前后的值并没有改变;而数组m不同,通过构造的方法,改变了数组m的值。

当把一个基本变量的值传递给一个方法时,方法得到的只是这个变量的一个副本,并没有真正改变这个变量所在内存中的值,所以在方法返回之后,用来储存这个方法的副本的内存被回收,因而这个副本也随之不在存活。而对于数组来说,当使用new这个关键字产生一个数组时,分配下来一块内存空间,m这个变量只是作为一个引用,从创建的这块内存中引用这些值。同样声明另外一个数组n;有:“ n = m; ”这行代码,从某种意义上讲,是第二个引用指向第一个引用所指向的同一块内存空间,就是当前的数组。把一个数组引用作为方法的参数来传递时,方法就可以使用该引用改变数组中的值。由此可见,对数组所做的修改是永久性 的。

这就是基本变量和数组(当然也包括对象)传递的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值