Java 字符串引用(String Interning)
我们都知道 Strings 在 Java 中是不可变的( immutable),因此 JVM 可以通过访问这个字符串的引用,或者我们可以借用指针的这个概念来访问 String 字符串。
通过指针访问字符串值的这个过程就可以称为引用(interning)。
当我们在内存中创建一个字符串的时候,JVM 将会根据你创建字符串的值在内存中进行查找有没有和你创建值相同的 String 对象已经被创建了。
如果,JVM 找到了这个对象的话,JVM 就将会为你创建的对象返回已经存在 String 的地址的引用,而不会继续申请新的内存空间,以便于提高内存的利用率。
如果,JVM 没有找到与创建对象相同的值的话,JVM 将会申请内存空间并且创建这个 String 对象,然后将新创建的这个 String 的对象进行返回,这个过程就称为引用(interned)。
让我们使用下面的方法进行验证:
@Test
public void whenCreatingConstantStrings_thenTheirAddressesAreEqual() {
String constantString1 = "HoneyMoose";
String constantString2 = "HoneyMoose";
assertThat(constantString1).isSameAs(constantString2);
}
上面的方法将会通过,原因是 constantString2 在创建的时候,将会得到的是 constantString1 内存地址的引用。
因此上面 2 个字符串是完全相同的。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2018-06-22 Confluence 6 从其他备份中恢复数据
2018-06-22 Confluence 6 从生产环境中恢复一个测试实例
2018-06-22 从 Confluence 5.3 及其早期版本中恢复空间
2018-06-22 Confluence 6 恢复一个空间的问题解决
2018-06-22 Confluence 6 从一个 XML 备份中导入一个空间
2018-06-22 Confluence 6 恢复一个空间