1、以双引号“”定义的字符串,直接存储在堆内存中。 如下图: 图中s1和s2存储的是一样的地址。 那么如果用“”定义的字符串产生了拼接呢? 如下图: 字符串一旦拼接,就会在堆内存中新开辟一块空间,来存储拼接后的字符串。 2、以new String(“一个字符串”);定义的字符串会直接在堆内存中开辟一块新空间。 如下图: 可以看到,用这种方式定义的两个内容一样的字符串,地址却不相同。