Java中String与new String的区别
小明 Lv6

在Java中,String对象可以通过字面量方式创建,也可以使用new运算符显式地创建。虽然这两种方法都可以创建String对象,但它们存在一些差异。

  • 用字面量创建String对象

当使用字面量创建String对象时,存放在方法区,Java会在一个字符串池(string pool)中检查是否存在相同的字符串。如果存在,则返回现有的字符串对象,否则会创建一个新的字符串对象并添加到字符串池中。

1
2
3
String str1 = "Hello"; // 创建一个字符串,并将其放入字符串池中
String str2 = "Hello"; // 检查字符串池中是否已经存在“Hello”,已经存在了就直接返回引用
System.out.println(str1 == str2); //true
  • 使用 new 运算符显式地创建String对象

使用new运算符创建String对象是不会检查字符串池的,每次创建总会生成一个新的对象,存放在堆空间,即使内容相同,在内存中也是两个不同的对象。

1
2
3
String str3 = new String("Hello"); // 创建一个新的字符串对象,存储在堆中
String str4 = new String("Hello");
System.out.println(str3 == str4); //false

由于每次调用new关键字都会创建一个新对象,因此多次使用该方式创建相同内容的字符串对象会占用过多的内存空间。因此建议在不需要改变字符串内容时应该尽量使用字面量的方式创建字符串对象。

关注获取更多资源

image
 评论