📜  Java中的字符串字面量与字符串对象

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

Java中的字符串字面量与字符串对象

比较 String 字面量和 String 对象的字符串初始化性能。
字符串字面量

这是字符串字面量。当你像这样声明字符串时,实际上是在调用 String 的 intern() 方法。此方法引用字符串对象的内部池。如果已经存在字符串值“GeeksForGeeks”,则 str 将引用该字符串并且不会创建新的 String 对象。有关详细信息,请参阅Java中的初始化和比较字符串。

字符串对象

这是字符串对象。在这种方法中,JVM 被迫创建一个新的字符串引用,即使“GeeksForGeeks”在引用池中。

因此,如果我们比较字符串字面量量和字符串对象的性能,字符串对象的执行时间总是比字符串字面量量多,因为它每次执行都会构造一个新的字符串。
注意:执行时间取决于编译器。

下面是比较它们性能的Java程序。

// Java program to compare performance 
// of string literal and string object
  
class ComparePerformance {
  
    public static void main(String args[])
    {    
        // Initialization time for String
        // Literal
        long start1 = System.currentTimeMillis();
          
        for (int i = 0; i < 10000; i++)
        {
            String s1 = "GeeksForGeeks";
            String s2 = "Welcome";
        }
          
        long end1 = System.currentTimeMillis();
        long total_time = end1 - start1;
  
        System.out.println("Time taken to execute"+ 
                " string literal = " + total_time);
  
        // Initialization time for String
        // object
        long start2 = System.currentTimeMillis();
          
        for (int i = 0; i < 10000; i++)
        {
            String s3 = new String("GeeksForGeeks");
            String s4 = new String("Welcome");
        }
          
        long end2 = System.currentTimeMillis();
        long total_time1 = end2 - start2;
  
        System.out.println("Time taken to execute"+
                   " string object=" + total_time1);
    }
}

输出:

Time taken to execute string literal = 0
Time taken to execute string object = 2