class Demo
{
public static void main(String args[])
{
int a = 30;
int[] myarr ={10,20}; change(a);
System.out.println(“a=”+a);
change(myarr);
System.out.println("myarr[0]="+myarr[0]);
}
public static void change(int a)
{
a=20;
}
public static void change(int[] arr)
{
arr[0] =90;
} } 打印结果是 a=30 ; myarr[0]=90 分析:
基本数据类型是在 栈内存中的,引用数据类型是在堆内存中,比如数组,对象等; 当我们 int a=30的时候,a=30 是保存在栈内存中的,而 int [] myarr= {10,20}的时候,
在堆内存中产生一个数组,并分配一个地址,而且把该地址赋值给栈内存中的变量 myarr ,
使得该变量指向了 堆内存中的数组。
当执行到函数change(a)时,会开辟一个新栈,该栈中 a 被赋值为20 ,该函数执行结束后,
返回主栈,由于主栈中 a还是30 ,所以在打印的时候,会打印出 : a = 30
当执行到函数chang(myarr)的时候,同样会开辟一个新的栈,并将myarr的值传入,而此时myarr的值
是堆内存中数组的地址,所以此时函数中 arr指向了堆内存中的数组,当我们对arr操作时,实际上是在对堆
内存中的数组进行操作,所以堆内存中数组第0位上的数被改变为90。 函数执行完毕,返回主栈中,执行到打印arr[0]的时候,
就会打印出 arr[0]=90;
|
|