String对象能在堆中存放地址值吗

String line = new String("hello");
“hello"在常量池开辟了个空间,那么line指向的堆内存的地址存放的是常量池中“hello”的地址值,还是字符串"hello"???

String line = new String("hello");

这行代码可以拆分成2部分,分别为

String line = null;//这行代码的意义为:在栈空间中声明一块内存,该内存中保存的值为地址,内存名为line
line = new String("hello");
//因为String是final类,"hello"对应一个对象,这个对象会被存放在字符串常量缓冲区中
//tip:字符串常量缓冲区独立于运行时常量缓冲区
//如果"hello"是第一次出现则会单独声明一个对象,否则直接从缓冲区中拿
//所以new String("hello")的意义是通过拿取常量缓冲区中的hello来构建一个新的String对象,
//堆空间中保存的是String对象,堆中不存放对象引用
//字符串常量缓冲区位于Java方法区

string不是基本数据类型,所以line变量存放的就是对象的引用
hello是一个常量,会单独存放。
line对象是new出来的,所以两个地址不一样