用Java创建字符串对象有哪些不同的方法?

在这里,我们讨论了两种在Java中创建字符串对象的方法

  1. 通过使用字符串文字

  2. 通过使用新的关键字

现在,我们将借助示例详细讨论上面给出的每种方法。

1)使用字符串文字创建字符串对象

  • 字符串文字是正确的字符序列。

  • String Literal用字符源集的双引号引起来。

  • 当我们要表示一个适当的字符序列时,应该使用String Literal。

  • 每个String Literal必须以“ \ n”(空)字符结尾。

  • 通过使用双引号(“”)在Java中创建字符串Literal。

示例

    String str = "Java Programming";

注意:

  • 每当我们创建字符串文字时,Java虚拟机(JVM)都会首先检查“字符串常量池”,因此有两种情况:

    1. 如果池中已经存在String Literal,则在这种情况下,将返回对池实例的引用(即,不为现有的String Literal创建新实例)。

    2. 否则,池中不存在String Literal,那么在这种情况下,将创建一个新的字符串实例并将其放置在池中(即为新的String Literal创建新实例)。

  • 字符串对象存储在称为“字符串常量池”的特殊存储区中。

示例

//Java程序演示的例子
//通过使用字符串文字创建字符串对象。

public class CreateStringObjectByStringLiteral {
    public static void main(String[] args) {
        //创建一个字符串文字并放置在 
        //内存“字符串常量池”"string constant pool"

        String str1 = "Java Support OOPS Concepts";

        System.out.println(str1);

        //同样,我们创建相同的文字(“ Java Support OOPS-"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)都会在“堆内存”中创建一个新的字符串对象,并且文字“ Java Programming”将放置在“ String Constant Pool”中,而变量“ 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