作者: sunshine9091 时间: 2014-8-3 19:54
可以这样理解:
String s = "abc"是创建一个字符串对象,首先JVM在字符串常量池中检测是否已经存在了该字符串。如果存在,那么直接返回字符串常量池中该字符串的内存地址。如果不存在,那么就需要在字符串常量池中创建该字符串的对象,然后返回该字符串对象的内存地址。
String s1= new String("abc")方式创建字符串的时候,那么jvm首先也会在字符串常量池中检测是否已经存在了"abc"字符串,如果不存在,那么直接在字符串常量池中创建该对象,而且还会去到堆内存中创建该字符串对象,把字符串常量池中字符串对象的内容拷贝过去,并且把堆内存中字符串对象内存地址返回。如果字符串常量池中已经存在了指定的字符串,那么不会在字符串常量池中再创建,但是也去到堆内存中创建一个字符串对象,并且把字符串常量池中的字符串内容拷贝过去。