您的位置:首页 > 编程语言 > Java开发

java程序的参数传递分析

2015-10-12 20:43 447 查看
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="https://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;
}

}


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: