在以后的工作中,如果没有很好的掌握这两种传递方式,那么就会带了一些意想不到的问题.
如果要很好的掌握他们的,必须要对其内部的结构,也就是内存存储位置有一个比较清晰的印象
那么以后再写程序,不管遇到什么的程序,表现虽然不一样,但是内部结构(内存)的位置基本上
不会有太多的变化.好了.废话不说了:
第一种:值传递方式: 举个简单的程序
public class InitDataTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int 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