一直以来不明白 String str =”sss” 与String str =new String(“sss”)的区别,看了论坛和网上的相关解答,有了一些心得,原来里面涉及到一个名为字符串池( StringPool)的概念
String str =”sss” 采取字面值赋值 1) 查找字符串池有无sss,没有则在字符串池中创建sss对象,并把str引用指向sss对象, 2) 如果有,则直接指向存在对象 String str =new String(“sss”) 1) 首先在字符串池查找是否有无sss对象,有则不再字符串池创建,而在堆中创建,地址返回给str 2) 字符串池没有sss对象,则在池中创建sss对象,然后再堆中创建对象,将堆中的对象地址返回给str
|