浅拷贝和深拷贝的区别
首先浅拷贝和深拷贝只有在拷贝一个复杂数据类型才有讨论意义。
由于复杂的数据类型,如Object,Array等是存储在内存的堆内存里,所以访问这些数据的方法是内存地址的引用。
浅拷贝指的是拷贝出来的变量和被拷贝的变量的地址引用的是同一个对象。这个被拷贝的对象也许是多层的,但是只要拷贝出来的变量有一层引用的是同一个对象,这个过程都称谓浅拷贝。
深拷贝和浅拷贝相反,他拷贝出来的变量和原变量的内存地址是独立的,两者互不干扰,如果有多层的情况下,每一层指向的地址都是新开辟的内存的地址。
一、数据结构中的堆和栈
1. 栈
是一种连续储存的数据结构,具有先进后出的性质。
通常的操作有入栈(压栈),出栈和栈顶元素。想要读取栈中的某个元素,就是将其之间的所有元素出栈才能完成
2. 堆
是一种非连续的树形储存数据结构,每个节点有一个值,整棵树是经过排序的。特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。常用来实现优先队列,存取随意。
二、内存中的栈区与堆区
1. 内存中的栈区与堆区比较
栈区 | 堆区 |
---|---|
Stack memory内存空间由操作系统自动分配和释放。 | Heap Memory内存空间手动申请和释放的,Heap Memory内存常用new关键字来分配。 |
Stack Memory内存空间有限。 | Heap Memor的空间是很大的自由区几乎没有空间限制。 |