Java String a=new String("ABC")的创建 - Summer1218 - 博客园
String a = new String("a");创建了几个对象?_csdn_yaohailong的博客-CSDN博客
结论:一个或两个
盗个图
1.不过这个图有一点应该标错了,s2应该=0x001,指向方法区中常量池地址,不是堆中的地址
2.分清
引用 地址 地址存的是什么 引用的值 == equals
引用:指s1,s2
地址:堆中地址 0x0001 和 方法区地址0x001
地址存的是什么:堆中地址存的是 方法区地址;方法区地址存的是变量
引用的值:就是存放内容值 堆中是方法区地址,方法区是什么?如果是变量abc,equals不相等啊?
== 比较的是内存地址 很明显堆中地址 0x0001 与方法区地址0x001不等
equals 比较的是值,那也不等啊,todo
2.String a = new String("abc"); 常量池中不存 abc,会创建两个对象,开辟两个地址,一个堆中地址,一个方法区中地址,堆中存 方法区中地址,方法区中地址存abc
再盗图
这个标的对
疑问:
equals比较的到底是什么?是值,为什么相等?
上面推倒重来,如果下面这位兄台说的对,堆中存的不是方法区地址是 abc的值,就解释通了。
https://www.jb51.net/article/186259.htm