美文网首页
java String 本质

java String 本质

作者: tracy_668 | 来源:发表于2018-04-04 15:06 被阅读13次

String 是否是真的不变?

说明String 并不是不可改变的,可以通过反射机制来修改string底层的数组。

为什么system.out.println("tracy")也会输出trac_??它其实与system.out.println(a)编译后的字节码是一样的!!

string的internal方法:

jdk1.7后输出 true!!!  jdk1.7之后,hotspot将常量池从永久代移到了元空间, intern方法在实现上发生了比较大的改变,它还是会先去查询常量池中是否存在,如果存在直接返回常量池中的引用,如果在常量池找不到对应的字符串,不会将字符串拷贝到常量池(也即不会新生成一个字符串对象)而只是在常量池中生成一个对原字符串对象的引用。因为常量池中没有str01这个字符串对象,会在常量池中生成一个对堆中“str01”的引用,在进行字面量赋值的时候常量池已经存在,直接返回引用即可,str1和str2都是指向堆中的字符串!!返回true!

调换位置后,返回false, 在进行字面量赋值的时候,常量池中不存在字符串对象,所以会在常量池中生成该字符串对象,str1指向常量池中的位置,而str2指向堆中的位置,进行intern方法时,对str1和str2没有任何影响了!

相关文章

网友评论

      本文标题:java String 本质

      本文链接:https://www.haomeiwen.com/subject/ebpkhftx.html