HOWTO · Java

在 Java 中复制字符串

这篇文章介绍了一种如何在 Java 中复制一个 String 的方法。

在 Java 语言中,字符串是一种存储字符序列的数据类型。字符串是一个包装类,它提供了诸如 compare()replace()substring() 之类的方法。每当对象被实例化时,对象就会存储在堆内存中。

在 Java 中复制字符串

下面是向你展示如何在 Java 中复制字符串的代码块。

public class StringCopy {
  public static void main(String[] args) {
    String first = "First String";
    System.out.println("First initially = " + first);
    String second = first;
    System.out.println("String copy in second = " + second);
    first = "Updated string";
    System.out.println("First after update = " + first);

    String newCopy = String.copyValueOf(first.toCharArray());
    System.out.println("Copy using copyValueOf() = " + newCopy);

    String copyString = new String(first);
    System.out.println("Copy using new = " + copyString);
  }
}

在上面的程序中,在操作的第一部分初始化了一个字符串。表示 String first = "First String" 在内存中创建了 First String 的实例;此外,这个新的字符串地址首先被分配给变量。该值使用 println() 方法打印。

现在,String second = first 行将第一个引用存储在第二个实例中,并在另一行中打印副本值。因此,second 变量包含 first 引用。然后,first = "Updated string" 会将第一个的引用从现有值更改为堆内存中的另一个字符串。

Java 字符串本质上是不可变的。这意味着当一个字符串被创建时,它就在堆内存中。当另一个值被分配给第一个变量时,它不会被覆盖。相反,该变量现在引用了堆内存中的另一个字符串。除非垃圾收集器开始工作,否则堆内存中的引用会存储到堆中。当没有被任何变量引用时,该函数会从常量内存池中清除变量。

另一种复制字符串的方法是使用 copyValueOf 方法。它是一个以字符数组作为输入的静态工厂方法。该实例首先使用 toCharArray 函数转换为字符数组。最后的字符串实例被 newCopy 变量引用并打印在另一行中。

复制字符串的第三种方法是使用 new 关键字。该方法在内存中创建两个实例:第一个保存值,另一个 copyString 变量存储 first 变量的引用。

下面是从上面的程序产生的代码块。

输出:

First initially = First String
String copy in second = First String
First after update = Updated string
Copy using copyValueOf() = Updated string
Copy using new = Updated string