java程序的参数传递分析
来源:互联网 发布:剑侠情缘手游工资算法 编辑:程序博客网 时间:2024/06/07 12:20
1、关于Java程序的参数传递可以分为
①传递的是基本数据类型(如:int、float、doube.....);
②传递的是引用数据类型(如:用户自定义类);
一、先分析基本数据类型,程序如下:
public class Test01{public static void m1(int a){ a++;System.out.println("a="+a);}public static void main(String[] args){int a=10;m1(a);System.out.println("a="+a);}}
<strong><span style="font-size:18px;">程序运行的结果如下:</span></strong>
<img alt="" src="http://img.blog.csdn.net/20151012210641343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
由结果我们可知两次的结果不一样,接下来我们根据内存来分析是why:
需要注意的是m1方法中的a和main方法中的a是完全处在两块不同的内存空间中,他们的值互不影响。所以他们的打印结果不同。
二、我们谈论关于引用类型的参数传递,代码如下:
public class Test01{public static void m2(Animal a1){ a1.age++;System.out.println("age1="+a1.age);}public static void main(String [] args){Animal a1=new Animal(10);m2(a1);System.out.println("age="+a1.age); }}class Animal{ int age;Animal(){}Animal(int _age){ age=_age;}}
运行结果如下:
我们接下里继续分析这是why:
stack 中的Animal对象存储的是内存地址,当main方法执行到m2(a1)处时,a1将内存地址copy给上面的a1,此时它们两个a1都指向同一块内存空间,接着m2方法执行到a1.age时,它是指向堆中的对象来说的,所以age变成11,由于两个a都指着同一块内存空间,所以对于main方法中的age来说,它的值也是11;
三、给大家补充一点关于new出来的对象何时能才能被Java的自动垃圾回收机制回收:
当new出来的对象没有更多的引用指向它时,Java的自动垃圾回收机制将会将它当成垃圾回收处理掉;如:
public class Test01{ public static void main(String[] args){ Animal a=new Animal(10); a=null;}}class Animal{int age;Animal(){}Animal(int _age){age=_age;}}
0 0
- java程序的参数传递分析
- Java 参数传递分析
- Java 函数参数传递分析
- java的参数传递
- JAVA的参数传递
- Java-参数的传递
- Java的参数传递
- java 的参数传递
- Java参数的传递
- Java的参数传递
- java的参数传递
- java的参数传递
- Java的参数传递
- Java的参数传递
- Java程序的参数传递及项目打包成JAR
- 参数传递的代码分析
- 参数在java程序中如何传递
- java程序执行过程,参数传递过程
- linux 16个应该了解的命令
- samba配置
- Objective-C 对字符串的操作
- gcc编译程序的过程
- SQLServer MySql 计数器表
- java程序的参数传递分析
- 1754 HDU
- 二叉树-递归遍历(先、中、后)
- Fragment 碎片 (下)
- Android-多媒体编程
- HDU 3639 Hawk-and-Chicken 强联通缩点 + DFS
- 二叉树-非递归遍历(先、中、后)
- 操作字节数组
- 关于youku嵌入式播放器浏览器白色边框的问题