转:https://blog.csdn.net/suneqing/article/details/37909811
1、按被声明的位置划分
局部变量:方法和语句块内定义的的变量。(在定义局部变量时,必须对其进行初始化。)
成员变量:方法外部,类的内部定义的变量。(成员变量可以是java语言中任何一种数据类型(包括基本类型和引用类型))
2、
按所属的数据类型划分
基本数据类型
内存分析。
例如'int i=0;',在内存中只分配一个空间,名字是i,里面的值是0。只要使用了i这个名字就能找到其中的值。
引用数据类型:java中的对象是通过对其引用进行操作的。
内存分析:引用类型占两块内存,引用变量占一块,new出来的对象占一块内存。
例如:
声明一个string类型的引用变量,但并没有指向一个对象。这时候它在内存中占一块内存。
String s;
使用new创建一个string类型对象,并通过s指向它,通过s对其进行操作。
s=new String("hello world");
总之,如果按照声明位置划分的变量类型中,局部变量声明后必须要赋值以后才能使用;而成员变量声明后可以不赋值,系统有默认值。
如果按所属的数据类型划分,基本类型数据只占用内存中的一块内存;而引用类型占用的是两块内存,根据引用变量就可以在堆内存中找到它指向的对象。