2.jdk1.6 方法区放在永久代(java堆的一部分),jdk1.7 特别将字符串常量池移动到了的堆内存中(使用参数-XX:PermSize 和-XX:MaxPermSize指定大小),jdk1.8放在单独的元空间里面(-XX:MaxMetaspaceSzie设定大小),和堆相独立。所以导致string的intern方法因为以上变化在不同版本会有不同表现。 3.jdk1.6将Hotspot虚拟机...
而String类中的intern方法是一个非常重要的方法,它的作用是返回一个字符串的规范化表示。 当我们创建一个字符串时,Java会在内存中的字符串常量池中创建一个新的字符串对象。而当我们使用intern方法时,Java会首先检查字符串常量池中是否已经存在该字符串的副本。如果存在,就返回常量池中的字符串对象;如果不存在,就...
Stringintern()方法是Java中的一种常用的字符串优化方法,它可以有效的提高程序的内存使用效率,因为它不需要每次使用字符串的时候都创建一个新的字符串。 首先,使用Stringintern()方法,可以将要放置在字符串池中的字符串分配到堆内存中,然后堆内存中的字符串可以被JVM以引用的形式指向字符串池中的字符串,即此后只可以...
需要注意的是,由于字符串常量池是位于堆内存中的一部分,所以使用intern方法会增加堆内存的使用量。 4. String#intern 方法的使用示例 Stringstr1=newString("hello");Stringstr2="hello";Stringstr3=str1.intern();System.out.println(str1==str2);// falseSystem.out.println(str2==str3);// true 上述...
2.intern方法可以看成返回常量池中该字符串对象的引用。如果没有该字符串对象就把这个对象(或引用)加到常量池。 3.jdk1.6跟jdk1.7以上的区别是当常量池中不存在这个字符串,jdk1.6是直接复制对象到常量池,而jdk1.7以上是把对象的引用加入常量池。 4.类似于”abc”这样的字符串,在第一次被使用到(比如String a=...
StringTableCreateEntry类还有另外一个作用,就是用于接收最终的结果string,不管这个string是新创建的,还是原来就存在的。这也是为什么get_insert_lazy方法第四个参数还是stc的原因。 最后,StringTable::do_intern方法调用stc.get_return()返回结果,即,如果有对应的string,则返回对应的string,如果没有,则返回原string。
string intern()方法的作用是返回字符串对象的规范化表示形式。具体来说,当调用该方法时,如果字符串常量池中已经包含了一个等于此String对象的字符串(使用equals()方法进行比较),则返回常量池中的字符串;如果字符串常量池中不存在等于此String对象的字符串,则将此String对象添加到字符串常量池中,并返回该字符串对象...
Stringaaa="fff";Stringbbb=newString("fff");// 此时aaa和bbb的引用不同,但是值相同//而synchronized(aaa)和synchronized(bbb)是不会产生互斥锁的,因为aaa和bbb此时不是同一个对象;//如果此时执行:aaa.intern();// 那么aaa和bbb就是一个对象了(注意只是执行了aaa.intern()没有执行bbb.intern())// 所以...
intern简介 intern是String类中的一个native方法,所以它底层是用c++来实现的。感兴趣的同学可以去查看下JVM的源码了解更多的内容。 这里我们主要谈一下intern的作用。 intern返回的是这个String所代表的对象,怎么理解呢? String class维护了一个私有的String pool, 这个String pool也叫StringTable,中文名字叫做字符串常量...
String.intern()是一个native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。 上述的黑体部分,在jdk1.6和1.7(含以上)中的表现形式是不同的。