intern()在java中是什么
时间: 2024-04-15 10:27:41 浏览: 211
在 Java 中,`intern()` 是一个字符串方法,它用于在运行时将字符串添加到字符串常量池中,并返回对字符串常量池中对应字符串的引用。
当你使用 `intern()` 方法调用一个字符串时,Java 会首先检查字符串常量池中是否已经存在该字符串。如果存在,则返回对该字符串的引用;如果不存在,则将该字符串添加到常量池中,并返回对该新字符串的引用。
这个方法的主要应用是在比较字符串时,可以使用 `==` 运算符来比较两个字符串的引用,而不需要使用 `equals()` 方法来比较它们的内容。这样可以提高字符串比较的性能,因为比较引用的操作比比较内容的操作更快。
以下是一个示例:
```java
String str1 = new String("Hello");
String str2 = "Hello";
String str3 = str1.intern();
System.out.println(str1 == str2); // 输出: false
System.out.println(str2 == str3); // 输出: true
```
在这个例子中,`str1` 和 `str2` 是两个不同的字符串对象,它们的内容相同。使用 `==` 运算符比较它们的引用会返回 `false`。然而,通过调用 `intern()` 方法将 `str1` 添加到常量池中,并将返回的引用赋给 `str3`,此时 `str3` 和 `str2` 引用的是同一个字符串对象,所以比较它们的引用会返回 `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]。
阅读全文