基本数据类型参数传递与引用数据类型参数传递区别

来源:互联网 发布:java中的23种设计模式 编辑:程序博客网 时间:2024/06/02 23:59


package object;

 

//基本数据类型参数传递

 

/*

class Object_parameter{

public static void main(String args[]){

int x=3;

 show(x);

// System.out.println(show(x));

System.out.println("x="+x);

}

 

public static void show(int x){

x = 4;

//System.out.println(x);

}

}

*/

/* 分析一下执行过程:首先从主函数入口,首先main加载,进入栈内存, int x=3  是定义了一个局部变量,

 * 局部变量是存储在栈内存里,而且是在main函数里,第九行是  调用show(x)方法,同时把第八行的值传给了show()

 * ,然后被赋值为4,执行完以后,释放,所以main函数里只剩下x=3,show因为是在栈内存里,只要是执行完这段

 * 代码块会自动释放,所以执行结果是3

 * 

 *   */

 

 

//引用数据类型参数传递

public class Object_parameter {

int x = 3;

public static void main(String args[]){

Object_premeter d = new Object_premeter();

d.x = 9;

show(d);

System.out.println("x="+d.x);

}

public static void show(Object_premeter d){

d.x = 4;

}

}

 

 

 

/* 

 * 分析一下第二个程序的执行过程:

 *  在主函数先执行,首先是new了个对象,这个对象存在于堆内存中,堆内存里会默认初始化为0,然后有成员变量int x=3,所以把3

 *  赋值替代了0, 程序中用d变量来接收,也就是把这个对象 的引用赋给了d, 接着d.x=9,下面把9赋值给了x,

 *  此时x为9,show(d);就是把d作为参数传个了show(),也就是赋值给了show(),此时show也拿着new的那个对象的

 *  地址引用,执行外d.x=4,此时show栈内存里的x=4,注意,对象里的x也等于4,因为show()拿着对象的引用呢

 *  执行完show方法,代码块释放,show栈里的x值消失,但是对象里的x已经为4,所以打印结果为4

 *     

 *     

 *     

 *   其实这两个程序有很大的相似,最大的区别就是  上面的show的代码 d.x=4  让show栈内存里的x的值变成了4,

 *   但是,上面的例子,show里的 x变成4之后代码块执行完了,自然而然就释放了,但是下面的例子,因为之前把d的

 *   引用赋值给了show()之后,虽然show栈内存里的值也变成了4也最后释放了,但是因为show拿着对象的引用,

 *   也就是说指向了对象,当show里的x变成4的时候,对象已经也变成4了,而且对象是在堆内存当中,所以说执行结果为4

 *      所以只是一个拿着引用,一个拿着引用的区别,切记切记  


0 0