用Java创建字符串对象有哪些不同的方法?
在这里,我们讨论了两种在Java中创建字符串对象的方法,
通过使用字符串文字
通过使用新的关键字
现在,我们将借助示例详细讨论上面给出的每种方法。
1)使用字符串文字创建字符串对象
字符串文字是正确的字符序列。
StringLiteral用字符源集的双引号引起来。
当我们要表示一个适当的字符序列时,应该使用StringLiteral。
每个StringLiteral必须以“\n”(空)字符结尾。
通过使用双引号(“”)在Java中创建字符串Literal。
示例
String str = "Java Programming";
注意:
每当我们创建字符串文字时,Java虚拟机(JVM)都会首先检查“字符串常量池”,因此有两种情况:
如果池中已经存在StringLiteral,则在这种情况下,将返回对池实例的引用(即,不为现有的StringLiteral创建新实例)。
否则,池中不存在StringLiteral,那么在这种情况下,将创建一个新的字符串实例并将其放置在池中(即为新的StringLiteral创建新实例)。
字符串对象存储在称为“字符串常量池”的特殊存储区中。
示例
//Java程序演示的例子 //通过使用字符串文字创建字符串对象。 public class CreateStringObjectByStringLiteral { public static void main(String[] args) { //创建一个字符串文字并放置在 //内存“字符串常量池”"string constant pool" String str1 = "Java Support OOPS Concepts"; System.out.println(str1); //同样,我们创建相同的文字(“JavaSupportOOPS-"Java Support OOPS //概念”),那么在这种情况下,不会创建新实例") then in that case a new instance is not created //因为JVM首先先检查“字符串常量池”"string constant pool" first before //创建一个对象(如果存在),然后返回相同的对象 String str2 = "Java Support OOPS Concepts"; System.out.println("Return the same already placed in SCP :" + " " + str2); } }
输出结果
Java Support OOPS Concepts Return the same already placed in SCP : Java Support OOPS Concepts
2)使用“new”关键字创建一个String对象
在这里,我们将通过使用“new”关键字以及如何在“new”关键字的帮助下创建字符串对象来看到第二类。
这与使用“new”关键字创建其他对象类似。
示例
String str = new String("Java Programming");
在上面的示例中,创建了两个对象以及一个引用(即,一个对象用于“字符串常量池”,另一个对象用于“堆”)。
注意:
每当我们使用“new”关键字创建String对象时,Java虚拟机(JVM)都会在“堆内存”中创建一个新的字符串对象,并且文字“JavaProgramming”将放置在“StringConstantPool”中,而变量“str”将引用放置在“堆内存”中的字符串对象。
当我们使用“new”关键字创建字符串对象时,这些对象将存储在称为“Heap”的特殊存储区域中。
示例
//Java程序演示的例子 //使用“new”关键字创建字符串对象。"new" keyword. public class CreateStringObjectByNewKeyword { public static void main(String[] args) { //创建一个字符串对象并放置在 //内存“字符串常量池”"Heap" String str = new String("Hello, Java"); //在上述情况下,创建了两个新实例 //[一个用于SCP,另一个用于堆]以及 //一个参考 System.out.println(str); } }
输出结果
Hello, Java