Java专门为String类设计了一个缓存池intern pool,intern pool是在方法区中的一块特殊存储区域,当我们通过 String str="yiyige" 这样的方式来构造一个新的字符串时,String类会优先在缓存池中查找是否已经存在内容相同的String对象。如果有则直接返回该对象的地址引用,如果没有就会构造一个新的String对象,然后放进...
intern()是java.lang.String对象中的一个有趣的功能。该intern()函数从应用程序中消除了重复的字符串对象,并有可能减少应用程序的整体内存消耗。在这篇文章中,让我们更多地了解这个intern()功能。1. 功能如何String intern()运作?在 Java 堆内存中,维护了一个字符串对象池。当您在字符串对象上调用intern()函...
Stringaaa="fff";Stringbbb=newString("fff");// 此时aaa和bbb的引用不同,但是值相同//而synchronized(aaa)和synchronized(bbb)是不会产生互斥锁的,因为aaa和bbb此时不是同一个对象;//如果此时执行:aaa.intern();// 那么aaa和bbb就是一个对象了(注意只是执行了aaa.intern()没有执行bbb.intern())// 所以...
在Java中,String#intern()方法是一个本地方法,它的实现与具体的Java虚拟机(JVM)实现有关。String#intern()方法的主要作用是将字符串添加到字符串常量池或从字符串常量池中获取该字符串的引用。 以下是String#intern()方法的实现概述: 如果字符串常量池中已经存在该字符串,则返回该字符串的引用。
StringTableCreateEntry类还有另外一个作用,就是用于接收最终的结果string,不管这个string是新创建的,还是原来就存在的。这也是为什么get_insert_lazy方法第四个参数还是stc的原因。 最后,StringTable::do_intern方法调用stc.get_return()返回结果,即,如果有对应的string,则返回对应的string,如果没有,则返回原string。
String.intern() String.intern() 方法用于在字符串常量池中查找是否存在与指定字符串相等的字符串。 如果找到了,就返回该字符串的引用;否则,就在字符串常量池中创建一个新的字符串对象,并返回对它的引用。 这个方法对于避免创建重复的字符串对象非常有用,特别是在处理大量字符串数据时,可以显著减少内存使用。
intern()方法在JDK1.6中的作用是:比如String s = new String("SEU_Calvin"),再调用s.intern(),此时返回值还是字符串"SEU_Calvin",表面上看起来好像这个方法没什么用处。但实际上,在JDK1.6中它做了个小动作:检查字符串池里是否存在"SEU_Calvin"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法...
1 String#intern 我们知道 String#intern 就是把首次遇到的字符串加载到字符串常量池中。 用上了 String#intern 后,String 的内存分布图的难度再次升级! 案例1 下面先看第一个单测试案例, 一起了解下 String#intern 。 @Testpublicvoiddemo3(){Stringtest=newString("ab");// @1Stringtest1=test.intern();...