“String s = "1"”与“String s = new String("1")”中的s一样吗?
在Java中,String s = "1"; 和 String s = new String("1"); 在功能上是相似的,因为它们都创建了一个内容为"1"的字符串,但它们在内存中的表现方式有所差异。
String s = "1";:这里,字符串字面量"1"会被放入字符串常量池中(如果它尚不存在)。s变量会被赋予指向这个常量池中字符串的引用。
String s = new String("1");:这里,首先会在字符串常量池中查找是否存在"1"这个字符串(如果存在,则不会重复创建)。然后,new String("1")会在堆内存中创建一个新的字符串对象,其内容是"1",s变量会被赋予指向这个新创建对象的引用。
因此,从内容上看,这两个字符串是雷同的,但从引用的角度看,它们大概指向差异的对象(除非字符串常量池中已经存在"1")。
StringBuilder与StringBuffer的区别