JDK1.7之下的inern用法

来源:互联网 发布:java microservice 编辑:程序博客网 时间:2024/05/16 14:25

JDK1.7之下的inern用法:

String s = new String("1aaa");  s.intern();  String s2 = "1aaa";  System.out.println(s2 == s.intern());   trueSystem.out.println(s == s.intern());    false

String s = new String(“1aaa”);
生成了常量池的“1”和堆空间中的字符串对象。 s为堆空间的内存地址。

s.inern() 检查对象s是否在常量池中存在,如果存在然后返回该字符串在常量池中的地址。

String s2 = “1aaa”; s2指向的是“1aaa” 在常量池中的地址。因此
s2 == s.intern()为true。

        String s3 = new String("1a") + new String("1a");          s3.intern();          String s4 = "1a1a";          System.out.println(s4 == s3.intern());  true

String s3 = new String(“1a”) + new String(“1a”);
在常量池中生成字符串la,并在堆中生成s3指向的堆空间,内容为lala。
此时常量池中没有lala
s3.intern(); 检查常量池中是否有lala,如果没有,则将lala放入常量池中。并返回常量池的地址。

s.inern检查常量池中是否存在某一个常量,如果存在则返回这个常量的值。
如果不存在,将字符串s的内容放入String常量池中,具体在JDK1.7中常量池不需要再存储一份对象了,可以直接存储堆中的引用,也就是s==s.inern 返回true。

PS: s==s.inern并不总是成立。如果常量池中已经存在了这个字符串,则s==s.inern并不相等。

原创粉丝点击