享元模式在 Java String 类中的应用。同样,我们还是先来看一段代码,你觉得这段代码输出的结果是什么呢?


String s1 = "小争哥";
String s2 = "小争哥";
String s3 = new String("小争哥");System.out.println(s1 == s2);
System.out.println(s1 == s3);

上面代码的运行结果是:一个 true,一个 false。跟 Integer 类的设计思路相似,String 类利用享元模式来复用相同的字符串常量(也就是代码中的“小争哥”)。JVM 会专门开辟一块存储区来存储字符串常量,这块存储区叫作“字符串常量池”。上面代码对应的内存存储结构如下所示:

不过,String 类的享元模式的设计,跟 Integer 类稍微有些不同。Integer 类中要共享的对象,是在类加载的时候,就集中一次性创建好的。但是,对于字符串来说,我们没法事先知道要共享哪些字符串常量,所以没办法事先创建好,只能在某个字符串常量第一次被用到的时候,存储到常量池中,当之后再用到的时候,直接引用常量池中已经存在的即可,就不需要再重新创建了

总结

  • Java String类用到了享元模式

思考

  • python中用到享元模式了么?

来源

55 | 享元模式(下):剖析享元模式在Java Integer、String中的应用

享元模式在 Java String 中的应用相关推荐

  1. 享元模式在 Java Integer 中的应用

    我们先来看下面这样一段代码.你可以先思考下,这段代码会输出什么样的结果. Integer i1 = 56; Integer i2 = 56; Integer i3 = 129; Integer i4 ...

  2. 享元模式-Flyweight(Java实现)

    享元模式-Flyweight 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. 本文中的例子如下: 使用享元模式: 小明想看编程技术的书, ...

  3. 享元模式(Java)

    下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次) (https://github.com/lihang212010/DesignPatterns-/tree/maste ...

  4. 享元模式在文本编辑器中的应用

    如何利用享元模式来优化文本编辑器的内存占用? 你可以把这里提到的文本编辑器想象成 Office 的 Word.不过,为了简化需求背景,我们假设这个文本编辑器只实现了文字编辑功能,不包含图片.表格等复杂 ...

  5. 设计模式-04.02-结构型设计模式-门面模式组合模式享元模式

    文章目录 门面模式(外观模式)[不常用] 门面模式的原理与实现 Demo案例-影院管理 传统方案 门面模式代码 TheaterLight Stereo Screen Projector Popcorn ...

  6. 23种设计模式之享元模式

    享元模式的定义 定义: 使用共享对象可有效的支持大量的细粒度的对象 通俗的说, 就是将类的通用属性抽出来,建立对象池,以达到限制对象数量的效果 上面定义中要求细粒度对象, 那么不可避免的使得对象数量多 ...

  7. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  8. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  9. JAVA设计模式--享元模式

    目录 一.什么是享元模式 二.享元模式在Java中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...

最新文章

  1. 负二项分布学习[转载]
  2. 2017-2018网络攻防第二周
  3. Stanford UFLDL教程 栈式自编码算法
  4. debian部署mysql和tomcat_【超级详细】在Debian/kali/linux服务器下搭建Tomcat7+mysql+jdk8环境...
  5. 程序员,别逼自己学 AI 了,掌握正确的方法,开发水平暴增!
  6. hp打印机没有右键扫描_安装HP打印机报错 0x000006be解决方法,图文操作步骤详解...
  7. spring-eureka 源码解读----为什么一个服务最多两分钟被其他服务感知
  8. Unity Animator动画状态机 深入理解(一)
  9. openstack---keystone
  10. RocksDB源码学习-四-读-三
  11. MDK KEIL 下载算法程序 外部存储QSPI FLASH
  12. 南京邮电大学汇编——实验一:汇编语言语法练习与代码转换
  13. python实训报告心得体会-Python学习心得体会
  14. 权限控制框架 shiro
  15. 基于随机分形搜索算法的函数寻优算法
  16. 服务器存储视频文件夹在哪里找,微信视频文件夹存储在什么位置?在哪里能找到...
  17. mysql多个嵌套查询
  18. NumPy入门讲座(3):操作数组
  19. 游戏美术素材尺寸规划
  20. 剑指 Offer 05. 替换空格无标题(正则表达式)

热门文章

  1. Ubuntu-解决包依赖关系的三种办法
  2. python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...
  3. 关于zynq lwip link speed for phy address 1:0的问题
  4. 循环输出26个字母C语言,菜鸟求助,写一个随机输出26个英文字母的程序
  5. pythonlinux版本_Linux_Python版本控制
  6. 最长公共子串_两个字符串的最长公共子串(后缀自动机)
  7. 高速的二舍八入三七作五_北京高速公路恢复收费,相关负责人回应收费新政三大热点问题...
  8. mysql语法_MySql实用技能,最常用的删除语法
  9. python数字类型floatcomplexint_Python 四种数值类型(int,long,float,complex)区别及转换
  10. matlab network_无所不能的 MATLAB