java 值传递跟引用传递在内存中怎么分配的

来源:互联网 发布:高清网络机顶盒价格 编辑:程序博客网 时间:2024/05/22 14:47

在以后的工作中,如果没有很好的掌握这两种传递方式,那么就会带了一些意想不到的问题.

如果要很好的掌握他们的,必须要对其内部的结构,也就是内存存储位置有一个比较清晰的印象

那么以后再写程序,不管遇到什么的程序,表现虽然不一样,但是内部结构(内存)的位置基本上

不会有太多的变化.好了.废话不说了:


第一种:值传递方式: 举个简单的程序

public class InitDataTest {public static void main(String[] args) {// TODO Auto-generated method stubint a=5;     int b;b=a;b=6;trace(a,b);}static void trace(int a,int b){System.out.println("a的值为:"+a+"\nb的值为"+b);}}


trace(a,b);
}
static void trace(int a,int b){
System.out.println("a的值为:"+a+"\nb的值为"+b);
}
}

[结果如下]

a的值为:5
b的值为6

内存结构图如下:


上面的图对应的程序的执行顺序以及内存是怎么发生变化的.相信大家都能看的懂不.

第二种:引用传递 例子如下:



public class Number {
public static void main(String[] args) {
Test n1=new Test();
Test n2=new Test();
n1.i=9;
n2.i=47;
System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);
n1=n2;
System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);
n1.i=27;
System.out.println("n1.1="+n1.i+"\n"+"n2.i="+n2.i);
}
}
class Test{
int i;
}

内存变化图如下:



到此时堆中的没有引用的那块区域 等待垃圾回收器处理 此时他们2个指向了同一块内存空间. 

输出结果大家应该能想到的:

n1.1=9n2.i=47
n1.1=47n2.i=47
n1.1=27n2.i=27


0 0
原创粉丝点击