/*
* 成员变量和局部变量的区别:
* A:在类中的位置不同
* 成员变量:类中,方法外
* 局部变量:方法中或者方法声明上(形式参数)
* B:在内存中的位置不同
* 成员变量:堆内存
* 局部变量:栈内存
* C:生命周期不同
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值的问题
* 成员变量:有默认值
* 局部变量:没有默认值。必须先定义,赋值,最后使用
*/
堆区: 一般由程序员分配释放,由 malloc 系列函数或 new 操作符分配的内存,其生命周期由 free 或 delete 决定。在没有释放之前一直存在,直到程序结束,由OS释放。其特点是使用灵活,空间比较大,但容易出错
栈区: 由编译器自动分配释放,保存局部变量,栈上的内容只在函数(方法)的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限
public class Variable { int x; public void eat() { System.out.println("hello"); } public void show() { // int y; int y = 0; System.out.println(x); System.out.println(y); } }