Java中String类的intern()方法揭秘

来源:互联网 发布:网络歌曲爱一个人好难 编辑:程序博客网 时间:2024/06/05 20:44

随着java版本的不断推出,不同版本之间也会有细微差别,在这里讨论讨论String类的intern()方法!

jdk1.6之前(包括1.6):

java运行中常量池是在方法区,而通过new方法得来的对象都保存在堆里面,当某个字符串对象调用intern()方法时,如果常量池中已存在该字符串,则该操作没起到任何作用,如果常量池中不存在该字符串,则会把该字符串加入常量池中(该加入操作是通过复制原字符串来实现的),方法返回的也是复制后的实例引用,所以此时常量池中复制的字符串的地址与堆中被复制的字符串的地址不等。

jdk1.7之后:

java运行中常量池是在堆中,通过new方法得来的对象也保存在堆里面,当某个字符串对象调用intern()方法时,如果常量池中已存在该字符串,则该操作没起到任何作用,如果常量池中不存在该字符串,则会把该字符串加入常量池中(该加入操作是通过记录首次出现的实例引用),方法返回的是首次出现的实例引用,所以当某个字符串第一次出现,且调用intern()方法时,则该字符串的地址与常量池中的地址相等。






0 0