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
原创粉丝点击