引用类型在堆栈中的存储过程

引用类型的直接赋值和new后赋值在内存空间中有何变化,如String str="abc";和String str=new String();
str="abc"; 这两者在堆栈空间都是如何存储的?

String str="abc";会从String常量池中查找,如果存在“abc”,则取出使用,不存在则在常量池中创建该对象常量,然后引用。
常量池在内存中的方法区中。
String str=new String();是在堆中直接创建对象。
str="abc";将该对象的引用指向常量池的“abc”。

前者是在栈上申请的临时空间来存放该字符串,后者是在堆上申请的空间,并且初始化了!(malloc也可以申请堆空间,不过不初始化,要用memset)

基本类型的变量和对象的引用一般都是存在栈中,存取快,new出来的对象和数组放在堆中

局部变量,引用放在堆栈上,引用的对象放在堆上,引用指向它存储的对象。
除了局部变量,别的一切变量,无论是不是引用还是值类型还是什么,都在堆上。