📜  作为常量或单例的Java字符串字面量

📅  最后修改于: 2022-05-13 01:55:46.302000             🧑  作者: Mango

作为常量或单例的Java字符串字面量

字符串是一个字符序列,在Java编程中被广泛使用。在Java编程语言中,字符串是对象。在Java中,如果我们在其他字符串变量声明中使用相同的字符串,虚拟机可能只会在内存中创建单个 String 实例。为了便于理解,让我们考虑如下示例:

图 1:

String string1 = "GeeksForGeeks";
String string2 = "GeeksForGeeks";

在上面的例子中, Java虚拟机只会在内存中创建一个“GeeksForGeeks”实例。有两个不同的变量,初始化为“GeeksForGeeks”字符串将指向内存中的同一个字符串实例。下图更准确地描述了示例:-

字符串字面量因此成为事实上的常量或单例。更准确地说,在Java,表示Java String字面量的对象是从一个常量 String 池获得的,该池由Java虚拟机内部保存。这意味着,即使来自不同项目的类分别编译,但在同一应用程序中使用,也可能共享常量 String 对象。共享发生在运行时,因此它不是编译时功能。



图 2:如果我们希望这两个字符串变量指向单独的 String 对象,那么我们使用 new运算符如下:

String string1 = new String("GeeksForGeeks");
String string2 = new String("GeeksForGeeks");

即使两个字符串的值相同,上面的代码也会在内存中创建两个不同的内存对象来表示它们。下图描述了 new运算符的使用:

示例 1:

Java
// Java Program to Illustrate String Literals as
// Constants or Singletons
  
// Main class
// StringSingleton
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Strings
        String string1 = "GeeksForGeeks";
        String string2 = "GeeksForGeeks";
        String string3 = new String("GeeksForGeeks");
        String string4 = new String("GeeksForGeeks");
  
        // Checking if two string are same or not
        if (string1 == string2) {
  
            // Returns true
            System.out.println("True");
        }
        else {
  
            // Returns false
            System.out.println("False");
        }
  
        // Again checking if two string are same or not
        if (string1 == string3) {
  
            // Returns false
            System.out.println("True");
        }
        else {
  
            System.out.println("False");
        }
  
        // Again checking if two string are same or not
        if (string4 == string3) {
  
            // Returns false
            System.out.println("True");
        }
        else {
            System.out.println("False");
        }
    }
}


Java
// Java Program to Illustrate String Literals as
// Constants or Singletons
  
// Main class
// StringSingleton
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Strings
        String string1 = "GeeksForGeeks";
        String string3 = new String("GeeksForGeeks");
  
        // Print and display statements
  
        // Displays true
        System.out.println(string1.equals(string3));
  
        // Displays false
        System.out.println(string1 == string3);
    }
}


输出
True
False
False

示例 2:

Java

// Java Program to Illustrate String Literals as
// Constants or Singletons
  
// Main class
// StringSingleton
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Strings
        String string1 = "GeeksForGeeks";
        String string3 = new String("GeeksForGeeks");
  
        // Print and display statements
  
        // Displays true
        System.out.println(string1.equals(string3));
  
        // Displays false
        System.out.println(string1 == string3);
    }
}
输出
true
false