Puker[] ps=new Puker[cs.length*ns.length]
ps是数组类型,数组是一种单独的数据类型,数组属于引用数据类型
在内存中分别有一个堆内存,和栈内存,当我们读Puker[] ps的时候呢其实是在栈内存当中定义了一个局部变量ps,,这个局部变量ps他会在栈内存中开辟一个空间,这个空间里面有个ps,而new出来的东西不在栈内存里面而在堆内存中,凡是new出来的实体都在堆内存,堆内存里面存放的就是实体,实体包括数组和对象,数组也能称之为对象.,,,此时堆内存这部分一new Puker就在堆里面产生了一个空间,这个空间就是数组,这个大箱子一产生呢他里面有52个格子要放52个元素,所以这个大空间里面就分配了52个格子,而这每个格子呢都有一个编号,数组里面元素的类型是Puker对象类型,,,此时每个小格子里面都有个默认的初始化值null,那么这个堆内存和栈内存中的ps(就这个对象)他们2者之间怎么联系起来呢???,那么2者之间的联系是什么呢,???,,看下面的堆内存特点,,
堆内存的特点:
堆内存中的每一个实体都有一个存放位置,内存里面都是地址值,都是些二进制那些地址就是些数字,用这个地址呢来标识数据存放的位置,那么这个数组在内存中存放的时候他总有一个起始位置,,这个起始位置用16进制来表示,因为16进制他表示起来更短,,这个地址假设是0x0078,,那么这个地址0x0078就作为这个数组在堆内存中存放的一个首地址值,,那么用0x0078来标识数组位置的话,,我们只需要将这个0x0078地址值赋给栈内存当中的ps,注意这个是一个赋值动作,,赋的不是数组本身,而是数组在内存中的地址,,赋完以后那么栈内存当中的ps就有值了,,,此时栈内存当中的ps就指向了那个数组或者叫ps引用了那个数组,,数组没有真正的存放到ps变量中去,,而是ps只存放数组的内存地址,,他在引用那个数组而已......这个就是数组指向,,ps就指向那数组了,,
ps[index]=new Puker();
意思是:循环一次就new一个Puker对象,,然后把Puker对象的内存地址值赋给了 ps[index],,,就是说ps里面的52个小格子里存放的都是Puker对象内存地址值,,,
|