享元模式在 Java String 中的应用
享元模式在 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 中的应用相关推荐
- 享元模式在 Java Integer 中的应用
我们先来看下面这样一段代码.你可以先思考下,这段代码会输出什么样的结果. Integer i1 = 56; Integer i2 = 56; Integer i3 = 129; Integer i4 ...
- 享元模式-Flyweight(Java实现)
享元模式-Flyweight 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. 本文中的例子如下: 使用享元模式: 小明想看编程技术的书, ...
- 享元模式(Java)
下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次) (https://github.com/lihang212010/DesignPatterns-/tree/maste ...
- 享元模式在文本编辑器中的应用
如何利用享元模式来优化文本编辑器的内存占用? 你可以把这里提到的文本编辑器想象成 Office 的 Word.不过,为了简化需求背景,我们假设这个文本编辑器只实现了文字编辑功能,不包含图片.表格等复杂 ...
- 设计模式-04.02-结构型设计模式-门面模式组合模式享元模式
文章目录 门面模式(外观模式)[不常用] 门面模式的原理与实现 Demo案例-影院管理 传统方案 门面模式代码 TheaterLight Stereo Screen Projector Popcorn ...
- 23种设计模式之享元模式
享元模式的定义 定义: 使用共享对象可有效的支持大量的细粒度的对象 通俗的说, 就是将类的通用属性抽出来,建立对象池,以达到限制对象数量的效果 上面定义中要求细粒度对象, 那么不可避免的使得对象数量多 ...
- Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...
- Java设计模式之结构型:享元模式
一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...
- JAVA设计模式--享元模式
目录 一.什么是享元模式 二.享元模式在Java中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...
最新文章
- 负二项分布学习[转载]
- 2017-2018网络攻防第二周
- Stanford UFLDL教程 栈式自编码算法
- debian部署mysql和tomcat_【超级详细】在Debian/kali/linux服务器下搭建Tomcat7+mysql+jdk8环境...
- 程序员,别逼自己学 AI 了,掌握正确的方法,开发水平暴增!
- hp打印机没有右键扫描_安装HP打印机报错 0x000006be解决方法,图文操作步骤详解...
- spring-eureka 源码解读----为什么一个服务最多两分钟被其他服务感知
- Unity Animator动画状态机 深入理解(一)
- openstack---keystone
- RocksDB源码学习-四-读-三
- MDK KEIL 下载算法程序 外部存储QSPI FLASH
- 南京邮电大学汇编——实验一:汇编语言语法练习与代码转换
- python实训报告心得体会-Python学习心得体会
- 权限控制框架 shiro
- 基于随机分形搜索算法的函数寻优算法
- 服务器存储视频文件夹在哪里找,微信视频文件夹存储在什么位置?在哪里能找到...
- mysql多个嵌套查询
- NumPy入门讲座(3):操作数组
- 游戏美术素材尺寸规划
- 剑指 Offer 05. 替换空格无标题(正则表达式)
热门文章
- Ubuntu-解决包依赖关系的三种办法
- python界面制作和unity的有区别吗_由1~4人利用Sratch、Python、Unity或其它游戏开发工具设计与制作一个的教育类游戏。...
- 关于zynq lwip link speed for phy address 1:0的问题
- 循环输出26个字母C语言,菜鸟求助,写一个随机输出26个英文字母的程序
- pythonlinux版本_Linux_Python版本控制
- 最长公共子串_两个字符串的最长公共子串(后缀自动机)
- 高速的二舍八入三七作五_北京高速公路恢复收费,相关负责人回应收费新政三大热点问题...
- mysql语法_MySql实用技能,最常用的删除语法
- python数字类型floatcomplexint_Python 四种数值类型(int,long,float,complex)区别及转换
- matlab network_无所不能的 MATLAB