大概的就是长这个样子
//不new
String text = "hello";
//new
String textObject = new String("hello");
从功能上来讲,这两条语句的意思是一样的,都是创建一个值为 "hello" 的字符串对象,但是他们的实现方式不同
一、使用字面值创建字符串对象
String text = "hello";
这种方式是使用字符串字面值直接创建一个字符串对象。当编译器遇到字符串字面值时,它会在字符串常量池中查找是否已经存在相同值的字符串对象,如果存在,则直接返回该对象的引用;如果不存在,则在字符串常量池中创建一个新的字符串对象,并返回其引用。因此,如果字符串常量池中已经存在相同值的字符串对象,那么多个字符串变量可以共享同一个对象
二、使用构造函数创建字符串对象
String textObject = new String("hello");
这种方式是使用 String
类的构造函数显式地创建一个字符串对象。不同于使用字面值创建的字符串对象存储在字符串常量池中,通过构造函数创建的字符串对象存储在堆内存中。即使字符串常量池中已经存在相同值的字符串对象,通过构造函数创建的对象也会在堆内存中新建一个副本。这意味着,即使两个字符串的内容相同,它们在内存中也是不同的对象,不会共享内存
三、总结
虽然这两种方式都可以创建字符串对象,但是它们的存储位置和内存共享情况是不同的。通常情况下,推荐使用第一种方式,即使用字符串字面值创建字符串对象,因为它更加高效并且能够利用字符串常量池的特性来节省内存