关于栈与堆的理解
我相信大家对于栈和堆一定并不陌生,在我们学习语言,理解语言的过程中中难免出现一些专业术语,使我们又掉了几根头发,所以我一直在为不成为秃子而努力着。
要理解栈和堆那么首先知道它们是什么,有什么区别,住在哪里?
1.栈和堆是什么?
栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;
堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。
这里我们引进两个知识(简单数据类型和复杂数据类型):
「简单类型(基本数据类型、值类型)」:在存储时变量中存储的是值本身,包括string ,int,long,boolean,byte,等;
「复杂数据类型(引用类型)」:在存储时变量中存储的仅仅是地址(引用),通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Student等;(其内部可包含多个简单类型)。
2.栈和堆的存储方式:
简单类型存储方式:
(很明显的看出,值类型直接储存在栈空间中)
复杂类型储存方式:
(栈空间存储的是地址,对象实例在堆空间中)
3.传参方式
简单类型传参:
(这里我们创建了a,赋值为10,a被app方法作为参数传了出去,在app方法中进行运算,并输出,
结束后,再次输出,不过其输出内容未经app加工,故而结果为11,10)
package javatheory.栈和堆;
public class Two {
public static void main(String[] args){
int a=10;
app(a);
System.out.println(a);
}
public static void app(int x){
x++;
System.out.println(x);
}
}
复杂类型传参:
(和上面那个逻辑一样,我在这里就不加以解释了,留给你们)
package javatheory.栈和堆;
public class One {
public static void main(String[] args) {
Person a = new Person("张三");
System.out.println(a.getName());
abc(a);
System.out.println(a.getName());
}
public static void abc(Person x){
System.out.println(x.name);
x.name="王大";
System.out.println(x.name);
}
}
总结:栈和堆,其本质就是储存空间,只不过对于对象,方式,等方面不同罢了。
我们简单类型只要声明,复杂类型只要new就会在储存空间中开辟领地,储存内容会变更,所以我们叫这东西变量。