📜  如何优化Java中的字符串创建?

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

如何优化Java中的字符串创建?

new运算符通过运算符新对象动态分配(即在运行时分配)内存并返回对该内存的引用来实例化一个类。然后将该引用存储在变量中。 new运算符之后还调用类构造函数,该构造函数初始化新对象由于字符串创建是在 O(n) 时间复杂度中最佳工作的过程,其中 n 是字符串的长度。

执行时间可能会根据计算机的性能而有所不同。

例子 :

String str = new String("GeeksforGeeks");

使用 new 创建 String 所需的时间:

Java
// String creation using new keyword
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Array of string
        String str[] = new String[50000];
  
        // Clock starts
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 50000; i++) {
            // Create new String object and copy
            str[i] = new String("GeeksforGeeks");
        }
  
        // End Clock
        long endTime = System.currentTimeMillis();
  
        // Print Time
        System.out.println(
            "Creation time of String using 'new' keyword : "
            + (endTime - startTime) + " ms");
    }
}


Java
// String creation using intern() method
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Array of String
        String str[] = new String[50000];
  
        // Clock Starts
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 50000; i++) {
            // Create new String object and copy
            str[i] = new String("GeeksforGeeks");
            // Use of intern()
            str[i] = str[i].intern();
        }
  
        // End Clock
        long endTime = System.currentTimeMillis();
  
        // Print Time
        System.out.println(
            "Creation time of String objects with intern() : "
            + (endTime - startTime) + " ms");
    }
}


Java
// String creation using literals
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Array of String
        String str[] = new String[50000];
  
        // Clock starts
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 50000; i++) {
            str[i] = "GeeksforGeeks";
        }
  
        // End Clock
        long endTime = System.currentTimeMillis();
  
        // Print Time
        System.out.println(
            "Creation time of String literals : "
            + (endTime - startTime) + " ms");
    }
}


输出
Creation time of String using 'new' keyword : 12 ms

如何优化字符串创建?

1. 通过使用 String.intern() 方法:

String.intern()仅存储每个不同字符串值的一个副本的方法,该值必须是不可变的。如果它是由新关键字创建的,则它可用于从内存中返回字符串。它在字符串常量池中创建堆字符串对象的精确副本。

句法 :

public String intern()

返回:实习字符串。

使用 intern() 方法创建 String 所需的时间:

Java

// String creation using intern() method
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Array of String
        String str[] = new String[50000];
  
        // Clock Starts
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 50000; i++) {
            // Create new String object and copy
            str[i] = new String("GeeksforGeeks");
            // Use of intern()
            str[i] = str[i].intern();
        }
  
        // End Clock
        long endTime = System.currentTimeMillis();
  
        // Print Time
        System.out.println(
            "Creation time of String objects with intern() : "
            + (endTime - startTime) + " ms");
    }
}
输出
Creation time of String objects with intern() : 20 ms

带有intern( )的对象的创建时间和带有 'new' 关键字的对象的创建时间在彼此的创建时间附近波动

2. 通过使用字符串字面量:

字符串字面量应该用双引号括起来。每当它在程序员的代码中遇到字符串字面量时,编译器都会创建一个带有其值的 String 对象。

这是创建字符串的最快方式。

例子 :

String literal = "GeeksforGeeks";

使用字面量创建 String 所需的时间:

Java

// String creation using literals
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Array of String
        String str[] = new String[50000];
  
        // Clock starts
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 50000; i++) {
            str[i] = "GeeksforGeeks";
        }
  
        // End Clock
        long endTime = System.currentTimeMillis();
  
        // Print Time
        System.out.println(
            "Creation time of String literals : "
            + (endTime - startTime) + " ms");
    }
}
输出
Creation time of String literals : 9 ms