String str = new String(“abc“)
new 出来的对象和这个对象的引用 str,字符串的值 abc,这三个元素分别放在哪里?
- 字符串abc存在字符串常量池中,位于方法区。
- 创建的String对象位于堆内存,对象包含字符串的内容
"abc"
,但它是一个独立的对象,与字符串常量池中的对象不同。首次创建String对象时,字符串常量池并没有abc,那么会在字符串常量池创建abc字符串,然后获取其引用,最终在堆中创建了一个"abc"的String对象;第二次创建String对象时,会先去常量池找有没有字符串abc,找到了就获取其引用,然后创建新的String对象。- 引用变量
a
是一个指向String
对象的引用。它存储了String
对象的内存地址,而不是对象本身的内容。引用变量a
本身是一个局部变量,存储在当前线程的栈内存中。