区别:
全局变量(全局静态变量):作用整个类中,直接被类调用;放在方法区中;
当类加载的时候,就开始被创建,在类中只有一份; 会跟着类的消失而消失,生存时间较长。
成员变量:作用在整个类中(除静态方法不能使用,静态方法没有隐式的this),被对象调用。
如果没有实例化那么变量是放在栈中;实例化了对象放在堆中,栈中放的是指向堆中对象的引用地址。
在对象被创建时而存在,当对象被GC回收的同时,他也会消失,生存时间适中。
局部变量:作用在一个局部区域,比如说在一个方法中,方法调用。
放在栈中,new的对象放在堆中,8中基本数据类型变量放在栈中,变量所对应的值是放在栈帧中。
当方法被调用时而存在,当方法调用结束而消失,生存时间短。
举例:
public class Model {
/**
* 全局变量
*/
private static int a = 1;
/**
* 成员变量
*/
private int b;
public Model(int b) {
this.b = b;
}
public static void main(String[] args) {
// 局部变量
int c = 10;
Model modelA = new Model(2);
Model modelB = new Model(3);
}
}
对应对象模型图:
---------------------
参考:
https://blog.csdn.net/demo_gsl/article/details/81123918
http://www.hollischuang.com/archives/1910
https://blog.csdn.net/hxnlyw/article/details/94550158
原文:https://www.cnblogs.com/cocobear9/p/12514686.html