string.intern()是干嘛的
时间: 2024-08-16 14:00:21 浏览: 52
`String.intern()` 是 Java 中 String 类的一个静态方法,用于优化字符串的内存管理。当你创建两个完全相同的字符串时(除了它们在堆上的位置不同),Java 的垃圾收集器并不会自动消除这种冗余,因为它们在语法上被认为是不同的引用。这就是所谓的"复制-on-write"(每次修改都会复制整个字符串到新位置)的行为。
`intern()` 方法的作用就是将某个字符串对象标记为“共享”,如果当前 JVM 内存中已经有另一个字符串与之完全匹配(即内容和哈希码都相等),那么这个方法不会创建新的字符串实例,而是返回已经存在的那个实例,这样可以节省内存并减少哈希冲突。这意味着,如果你多次对同一个字符串使用 `intern()`,最终只会有一个副本存在于 JVM 中。
例如:
```java
String str1 = new String("Hello");
String str2 = "Hello";
str2 = str2.intern(); // 此时 str1 和 str2 指向的是同一个内存区域
System.out.println(str1 == str2); // 输出 true
```
相关问题
java.lang.String.intern与java.lang.String.format的差异
`String.intern()` 和 `String.format()` 是 Java 中两个完全不同的 String 方法。
1. `String.intern()`: 这个方法是一个静态方法,用于优化字符串常量池。当你创建相同的字符串多次(例如,通过`new String("hello")`),JVM 实际上只会在内存中保留一份这样的字符串实例,其余的引用会指向同一个实例,这就是所谓的 intern 行为。如果你不确定某个字符串是否已经在常量池中,可以使用这个方法检查并获取共享的实例,这有助于节省内存。然而,`intern()` 方法不会改变原始字符串内容,它只是返回已经存在的字符串。
2. `String.format()`: 这是一个格式化字符串的方法,它接受一个模式字符串作为第一个参数,以及零个或多个对象作为后续参数,然后按照模式将这些对象插入到字符串中。比如,`String.format("%s is %d years old", "John", 30)` 会产生 "John is 30 years old" 这样的结果。`format()` 主要用于构建动态、格式化的文本输出,支持变量替换、格式控制等复杂操作。
String.intern
String.intern是Java中的一个方法,它用于将字符串对象添加到字符串常量池中,并返回常量池中对应的字符串对象的引用。
当调用String的intern方法时,如果字符串常量池中已经存在该字符串,则返回常量池中的引用;如果字符串常量池中不存在该字符串,则会将该字符串对象添加到常量池中,并返回常量池中的引用。
这个方法通常用于优化字符串的存储和比较。使用intern方法可以减少重复创建字符串对象的内存消耗,并且可以通过引用比较来代替内容比较,提高字符串比较的性能。
需要注意的是,使用String.intern方法可能会占用较多的内存空间,因为所有通过该方法加入常量池的字符串对象都会一直存在于内存中,直到程序结束或者垃圾回收清理。
希望对你有所帮助!如果还有其他问题,请继续提问。
阅读全文