结论
引用类型,总是储存在堆上(数组同样属于引用类型,只不过他是使用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关键字,他同样是存放在堆上的,严格来说,他存放在堆里面的字符串常量池里面;
标签:存储,JAVA,String,int,类型,引用,new,堆栈,MyClass From: https://www.cnblogs.com/arvvio/p/16851776.html