# Java `String.intern()`方法示例

> 原文： [https://howtodoinjava.com/java/string/java-string-intern-method-example/](https://howtodoinjava.com/java/string/java-string-intern-method-example/)

Java `String.intern()`返回字符串池中存在的相等字符串字面值的引用。 如果**字符串池**中存在现有的字符串字面值，则返回其引用。 否则，将创建具有相同内容的新字符串，并返回对新字符串的引用。

使用[`String.equals()`](https://howtodoinjava.com/java/string/string-equals-method/)方法检查字符串是否相等。

## 1\. 字符串池

字符串池是堆内存中的保留内存区域，Java 用于存储字符串常量。 请注意，默认情况下 Java 字符串是不可变的。

Java 在字符串池中仅存储每个不同`String`值的一个副本。 它有助于在程序执行期间重用`String`对象以节省内存。 在运行的程序中可能有很多对字符串的引用，但是在字符串池中只有字符串的副本。

#### 1.1 两种创建字符串的方法

在 Java 中，我们可以通过两种方式创建字符串。

```java
String str1 = new String("hello world");

String str2 = "hello world";

```

在上面的示例中，两种方法都用于创建字符串，但是建议稍后使用字符串字面值。 **字符串字面值总是进入字符串池**。

当我们使用`new`关键字创建字符串时，将创建两个对象，即一个在堆区中，另一个在字符串常量池中。 创建的字符串对象引用始终指向堆区域对象。

要获取在字符串池中创建的相同对象的引用，请使用`intern()`方法。

## 2\. Java `String.intern()`方法

`String.intern()`返回对字符串池中存在的相等字符串字面值的引用。

众所周知，所有字符串字面值都是在字符串池中自动创建的，因此`intern()`方法适用于通过`'new'`关键字创建的`String`对象。

`String.intern()`是**原生**方法。 借助`intern()`方法，可以获得原始字符串对象对应的`String`常量池对象的引用。

## 3\. Java `String.intern()`示例

Java 程序使用`String.intern()`方法插入字符串。

```java
public class StringExample 
{
    public static void main(String[] args) 
    {
        //String object in heap
        String str1 = new String("hello world");

        //String literal in pool
        String str2 = "hello world";

        //String literal in pool
        String str3 = "hello world";

        //String object interned to literal
        //It will refer to existing string literal
        String str4 = str1.intern();

        System.out.println(str1 == str2);       //false
        System.out.println(str2 == str3);       //true
        System.out.println(str2 == str4);       //true
    }
}

```

程序输出。

```java
false
true
true

```

在此示例中，我们学习了**内联 Java** 中的字符串。 这是本机方法，可提供**高性能**。

参考文献：

[Java 字符串指南](https://howtodoinjava.com/java-string/)

[`String` Java 文档](https://docs.oracle.com/javase/9/docs/api/java/lang/String.html)