?
?
class="MsoNormal">??? 在说参数传递之前,先说一下栈和堆。其实我对它们也不是很了解-_-|||,不过我们可以去问度娘,所以我这里简单说一下,栈相当于缓存,堆相当于内存。
?
Java中参数传递包括两种,一种是值传递,一种是引用传递。
?
先说值传递。
?
八种数据类型(byte short int long float double char Boolean)和 String 类储存于栈中,即在栈中直接开辟出相应数据类型大小的空间,存储下这个值。当一个值传给这个值时,就该为传入的值,例如:
?
int n;//定义整型n,此时n被默认为0
?
n = 10;//10传给n,在栈中被储存的数据n值被改变,此时为10
?
再如:
?
int n;
?
int m = 10;
?
n = m;//m中存储的数据传给n,n此时为10
?
从上面两个例子,我们发现参数传递就是传递原始参数的值。n和m之间互不干扰,这很容易理解,n是n,m是m,其中哪一个改变也不会影响另一个。
?
?
?
引用传递
?
Java中引用传递只适用于对象类型和数组。
?
实际上在实例化对象的时候,new关键字在堆中开辟了与该类对应的空间,而对象名在栈中,此时对象名储存的不是对象中的属性和方法,而是对象在堆中的地址。
?
假设我们已经通过同一个类创建好对象obj1 和obj2,:
?
obj1 = obj2;
?
这时,obj2 传给obj1 的就是obj2 所储存的地址,也就是说obj1 此时储存的是obj2 的地址,这时候通过obj1 来调用方法和属性,都是obj2 的方法和属性。这时候obj2 就相当于两个对象名,而obj1 对象此时没有地址指向它。
?
对于数组也是如此。
?