黑马程序员 总结---> 传递问题
2012-12-23 21:53
197 查看
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
先看下面一段程序:
打印出来的结果是怎么样的呢?代入方法前后的a改变了吗?数组m呢?我们来看看打印的结果:
![](http://img.my.csdn.net/uploads/201212/23/1356269214_8814.jpg)
从结果可以看出,方法内部对a的修改改变了a的值,但是a在代入方法前后的值并没有改变;而数组m不同,通过构造的方法,改变了数组m的值。
当把一个基本变量的值传递给一个方法时,方法得到的只是这个变量的一个副本,并没有真正改变这个变量所在内存中的值,所以在方法返回之后,用来储存这个方法的副本的内存被回收,因而这个副本也随之不在存活。而对于数组来说,当使用new这个关键字产生一个数组时,分配下来一块内存空间,m这个变量只是作为一个引用,从创建的这块内存中引用这些值。同样声明另外一个数组n;有:“ n = m; ”这行代码,从某种意义上讲,是第二个引用指向第一个引用所指向的同一块内存空间,就是当前的数组。把一个数组引用作为方法的参数来传递时,方法就可以使用该引用改变数组中的值。由此可见,对数组所做的修改是永久性
的。
这就是基本变量和数组(当然也包括对象)传递的区别。
先看下面一段程序:
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 = 3*(n+2); System.out.println("代入方法中m["+n+"]是 "+ints ); } } }
打印出来的结果是怎么样的呢?代入方法前后的a改变了吗?数组m呢?我们来看看打印的结果:
![](http://img.my.csdn.net/uploads/201212/23/1356269214_8814.jpg)
从结果可以看出,方法内部对a的修改改变了a的值,但是a在代入方法前后的值并没有改变;而数组m不同,通过构造的方法,改变了数组m的值。
当把一个基本变量的值传递给一个方法时,方法得到的只是这个变量的一个副本,并没有真正改变这个变量所在内存中的值,所以在方法返回之后,用来储存这个方法的副本的内存被回收,因而这个副本也随之不在存活。而对于数组来说,当使用new这个关键字产生一个数组时,分配下来一块内存空间,m这个变量只是作为一个引用,从创建的这块内存中引用这些值。同样声明另外一个数组n;有:“ n = m; ”这行代码,从某种意义上讲,是第二个引用指向第一个引用所指向的同一块内存空间,就是当前的数组。把一个数组引用作为方法的参数来传递时,方法就可以使用该引用改变数组中的值。由此可见,对数组所做的修改是永久性
的。
这就是基本变量和数组(当然也包括对象)传递的区别。
相关文章推荐
- 黑马程序员 总结---> java中的两个运算问题
- operator->重载问题总结 让一个对象表现的像一个指针
- Jquery 向后台传递类似<p>等html元素问题
- 友善官方<<Mini2440 Linux移植开发实战指南>>问题总结
- startActivityforResult传递List<Object>参数错误问题
- ssh错误总结1.1----关与struts2中极为恶心的<s:action>标签问题
- android handler 传递 ArrayList<HashMap<String,Object>>问题
- operator->重载问题总结(转)
- 黑马程序员 浅谈---> JAVA指针问题
- 所有的问题, 包括自己想象的问题 <<总结项目用到的设计模式>>
- ARM学习总结1->寄存器初始值问题
- jsp中<a href=""></a>标签传递参数乱码问题解决
- 黑马程序员:Java基础总结----接口 Collection<E>&iterator
- 读<<CLR via C#>>总结(7) 以传引用的方式向方法传递参数---ref&out
- <C/C++>C语言字节对齐问题总结
- 黑马程序员:Java基础总结----子接口 List<E>及其实现类
- 黑马程序员 总结---> java中注释
- NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>问题解决总结
- 总结最近SVN更新时遇到的"<<<<<<< .mine“,>>>>>.的问题
- ibatis <dynamic> 标签 update 的相关问题总结