黑马程序员技术交流社区

标题: 关于堆栈理解,如有错误,欢迎纠正 [打印本页]

作者: 曾勇    时间: 2014-12-25 14:39
标题: 关于堆栈理解,如有错误,欢迎纠正
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;



作者: AuroraAria    时间: 2014-12-26 09:02
学习了,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2