0
点赞
收藏
分享

微信扫一扫

5. intern( )的使用

zibianqu 2022-03-15 阅读 26

intern( )的使用

如果不是用双引号声明的String对象,可以使用String提供的intern方法: intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。
●比如: String myInfo = new String("I love XXXXX") .intern() ;
也就是说,如果在任意字符串上调用String. intern方法,那么其返回结果所指向的那个类实例,必须和直接以常量形式出现的字符串实例完全相同。因此,下列表达式的值必定是true:
("a" + "b" + "c") . intern() == "abc"
通俗点讲,Interned string就是 确保字符串在内存里只有一-份拷贝,这样可以节约内存空间,加快字符串操作任务的执行速度。注意,这个值会被存放在字符串内部池(String Intern Pool)。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

拓展

在这里插入图片描述

题目: new String (“ab”)会创建几个对象?

拓展:new String(“a”) + new String(“b”)呢?

在这里插入图片描述

intern()的使用: jdk6 vs jdk7/8

总结String的intern()的使用:

  • jdk1.6中,将这个字符串对象尝试放入串池。
    • 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
    • 如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址
  • Jdk1.7起,将这个字符串对象尝试放入串池。
    • 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
    • 如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址

练习

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

intern(的效率测试:空间角度

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

大的网站平台,需要内存中存储大量的字符串。比如社交网站,很多人都存储:北京市、海淀区等信息。这时候如果字符串都调用intern()方法,就会明显降低内存的大小。

举报

相关推荐

0 条评论