直接赋值:String s = “abc”;
通过new对象赋值:String ss = new String(“abc”);
函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配。
堆内存用来存放new创建的对象和数组,其内的实例都会有内存地址。
一:直接给字符串变量s赋值会先在栈内存中开辟一个空间,然后检查常量池中是否有字符串"abc",如果有直接将其地址赋值给s,若没有就在常量池中创建常量对象,然后把地址赋值给s。
二:通过new对象给ss赋值,同样在栈内存中也会给ss开辟一个空间,在堆内存中也会开辟一个空间存放new出来的String对象,该对象的地址值赋值给ss;同样这时也会在常量池中检查是否存在字符串"abc",若存在则直接将常量池中的对象地址赋值给堆内存中String对象的构造器,不存在就在常量池中创建常量对象再赋值。