为什么String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上?公共池和堆又是什么?

为什么String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上?公共池和堆又是什么?

image
字符串常量池是堆的一部分,专门用于高效存储唯一的字符串字面量​​。String s1 = "abc"的方式直接与池交互,优先复用对象
而 String s2 = new String("abc")则无视池中情况,直接在堆上创建新对象