`intern()`方法是Java中的一個本地方法,主要用於字元串常量池(String Pool)中維護字元串對象的引用,以實現字元串的重用,從而節省記憶體。當調用一個字元串的`intern()`方法時,Java會首先檢查字元串常量池中是否已經存在一個等於該字元串內容的字元串。如果存在,`intern()`方法將返回常量池中的字元串對象的引用;如果不存在,`intern()`方法則會將該字元串對象添加到常量池中,並返回它的引用。
例如,在以下代碼中:
```java
String str1 = new StringBuilder("hello").append("world").toString();
System.out.println(str1.intern() == str1); // 輸出 true,因為str1.intern()返回的是常量池中已有的引用
```
由於`str1`已經是一個新的對象,其`intern()`方法會將其添加到常量池中,並返回該對象的引用,因此`str1.intern()`和`str1`引用的是同一個對象,所以輸出為`true`。
而在以下情況中:
```java
String str2 = new StringBuilder("java").toString();
System.out.println(str2.intern() == str2); // 輸出 false,因為str2.intern()返回的是常量池中的引用,而str2是堆中新創建的對象引用
```
`str2`是一個新的對象,其`intern()`方法會將其添加到常量池中,並返回常量池中的引用。這時`str2`和`str2.intern()`引用的是不同的對象,因此輸出為`false`。
總結來說,`intern()`方法的使用可以有效地減少記憶體消耗,特別是在處理大量字元串時。