java中intern() 方法
时间: 2023-06-14 13:07:54 浏览: 120
在Java中,字符串是不可变的,即一旦创建就不能更改其内容。Java中的intern()方法是一个本地方法,用于将字符串添加到字符串池中,并返回该字符串的引用。如果字符串池中已经存在该字符串,则返回池中该字符串的引用,否则将该字符串添加到池中,并返回新字符串的引用。
以下是使用intern()方法的示例:
```java
String str1 = "hello";
String str2 = new String("hello");
String str3 = str2.intern();
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // true
```
在上面的示例中,str1和str2是两个不同的对象,因为str2是使用new操作符创建的。然而,通过调用str2的intern()方法,我们将它添加到字符串池中,并返回池中该字符串的引用,即str3。因此,str1和str3引用的是同一个对象,因此最后一行的输出结果为true。
相关问题
java中intern的用法
A:在Java中,String类型的字符串对象有一个intern()方法,该方法可以将字符串对象加入到字符串池中,如果字符串池中已经存在该字符串,则返回字符串池中的引用,否则将该字符串加入池中并返回。
使用intern()方法可以减少内存使用量。例如:
String str1 = "Hello";
String str2 = new String("Hello");
if (str1 == str2) { // false
System.out.println("str1 == str2 is true");
}
if (str1.intern() == str2.intern()) { // true
System.out.println("str1.intern() == str2.intern() is true");
}
在上面的示例中,str1和str2所指向的字符串内容相同,但它们却不是同一个对象。通过intern()方法可以将这两个字符串对象所对应的字符串加入到字符串池中,使它们都指向池中的同一个字符串对象。这样比起使用new操作符创建新的字符串对象来说,内存使用量就会更低。
java intern
Java中的intern方法是一个本地方法,可以将一个String对象插入到字符串池中,并返回这个对象的引用。如果字符串池中已经存在了一个等于此String对象的字符串,则返回池中的字符串。在Java编程中,使用intern方法可以避免创建重复字符串所带来的性能问题[^1]。
下面是一个使用intern方法的例子:
```java
String s1 = "hello";
String s2 = new String("hello");
String s3 = s2.intern(); // 将s2插入字符串池中,并返回池中的字符串
System.out.println(s1 == s2); // 输出false,因为s1和s2是不同的对象
System.out.println(s1 == s3); // 输出true,因为s3引用的是池中的字符串
```
另外,在Java 7之后,由于intern方法在一些场景下使用不当可能会导致性能问题,字符串常量池的实现方式也有所改变。在Java 7之前,字符串常量池是位于永久代(PermGen)中的。在Java 7之后,字符串常量池被移到了堆中。这就意味着,在Java 7及以后的版本中,由于字符串常量池不再位于PermGen中,因此使用intern方法时不会出现PermGen内存溢出的问题[^2]。
阅读全文