JAVA中的堆栈数据存储

结论

引用类型,总是储存在堆上(数组同样属于引用类型,只不过他是使用c实现的);

基础类型,在方法中的局部变量储存在栈,对象实例中的实例字段则随对象一同存储在堆上;

线程享有自己的栈空间,因此局部变量是线程安全的;

例子
点击查看代码
public class Test{
	public static void main(String[] args){
		int i = 0;                   //栈;
		MyClass c = new MyClass();   //对象包括其实例字段都储存在堆上,变量c是一个局部变量,同上存储在栈上;
										//c是一个引用,其在栈上的空间储存了实际对象的堆空间地址;
		int[] arr = new int[]{1,2,3};//arr在栈上,数组内容在堆上;
	}
}

class MyClass{
	private int i;
	private String s;				 //无论是引用s还是String对象,都存放在堆中;
}
一些细节

java提供了一些基础类型的封装类,同样的这些类也属于引用类型;

另外有一种特殊情况,String类型往往不使用new关键字,他同样是存放在堆上的,严格来说,他存放在堆里面的字符串常量池里面;

posted @ 2022-11-02 17:29  arv  阅读(109)  评论(0)    收藏  举报