概念
- 局部变量:在方法内定义的变量称为“局部变量”或“临时变量”,方法结束后局shu部变量占用的内存将容被释放。
- 成员变量:在类体的变量部分中定义的变量,也称为字段。
- 全局变量:全局变量,又称“外部变量”,它不是属于哪个方法,作用域从定义的地址开始到源文件结束。
作用域
局部变量和成员变量主要是他们作用域的区别:
- 成员变量个是类内部;局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置)。
- 成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
存储位置
- 对于局部变量,局部变量在所在方法调用时,如果是基本类型,会把值直接存储在栈;如果是引用类型,比如String s = new String(“william”);会把其对象存储在堆,而把这个对象的引用(指针)存储在栈。
再如
String s1 = new String(“william”);
String s2 = s1;
s1和s2同为这个字符串对象的实例,但是对象只有一个,存储在堆,而这两个引用存储在栈中。
- 成员变量在所在类被实例化后,存在堆内存中。但是静态变量,常量等存放在方法区中。
- 全局变量存放在方法区。
全局变量、静态变量、常量、所有方法(包括静态和非静态的)在方法区;堆储存对象、数组(成员变量)、非静态变量(成员变量)。方法区中的内容是被共享的。