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