Java基础 之 变量和内存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34083066/article/details/86633664

        内存分为堆内存和栈内存。java的基本类型数据和引用类型的变量都是存放在栈内存中。而变量引用的对象及其成团变量和方法,都是存放在堆内存当中。

比如:

public class People {
	
	public static String typeName = "人";
	
	private int id;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
}

当People被加载时,系统先初始化People类,在堆内存中分配了一块内存用来存放People类和他的静态成员变量,并且如果没有指定成员变量的初始值。系统会为成员变量赋默认初始值。

我们接着运行:

People p = new People();

        然后当生成People对象时,堆内存中又分配了一块内存用来存放People对象,对象中存放了他的实例成员变量id并且如果没有显式的赋予初始值的话,会给实例成员变量赋予默认的初始值;

        在栈内存中分配了一块内存,用来存放引用变量p。而变量p只存放了People对象在堆内存中的地址。这样就将变量p指向了People对象。

当我们又执行:

People p2 = p;

这个时候,我们又分配了一块栈内存存放变量p2;

并将变量p存放的People的地址。赋值给了p2,这使我们p和p2都指向同一个对象。

成员变量和局部变量

变量分类,如图

成员变量在类初始化时或者对象初始化时被分配内存且赋予初始指。

成员变量和局部变量

成员变量定义后直接会分配内存,所以可以不指定初始值。会有默认的初始值进行赋值;

局部变量定以后并不会直接分配内存。只有当赋值后才会被分配内存,并且不会默认赋初始值。所以必须显式的指定初始值。

猜你喜欢

转载自blog.csdn.net/qq_34083066/article/details/86633664