享元模式在 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中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...
最新文章
- 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
- Yii学习笔记【2】
- PHP explode() 函数
- centos6 安装 mantisbt-1.2.8 —— (4)在CentOS6.4中安装配置LAMP环境
- vue router获取整条路径参数
- Cocos2d-x3.1FileUtilsTest使用
- 啊哈算法-游戏币问题(dp)
- jquery操作滚动条滚动到指定位置
- 4.28考试总结(下午)
- 佳能G1810G2810G1800G2800G3800 废墨 手动清零方法
- CCNA中文版完整教程
- MapGIS Mobile开发
- 中标麒麟Neokylin7桌面版安装指南——基于VirtualBox虚拟机
- 怎么清除U盘病毒的简单步骤
- 苹果产品中投影的秘密在这里
- 申宝证券-A股市场的普涨
- mysql笔记(一):Navicat for MySQL远程连接mysql服务报错的解决方法(1130、2509)
- Symantec赛门铁克强制型SSL服务器证书_网站安全SSL数字证书
- 基于SSM的图书馆座位预约管理系统
- 字节跳动疯狂扩张:IPO前的最后一战
热门文章
- 深度学习自学(十五):人脸识别数据预处理方法
- vant在cell中加表格_在vant 中使用cell组件 定义图标该图片和位置操作
- 独立的定义有多重等价表述方式
- MySQL数据库查询重复数据办法
- Java基础教程【第三章:Java运算符】
- win7下如何删除不需要的windows服务
- dma和通道的区别_Java中IO和NIO的本质和区别
- C++两个函数可以相互递归吗_C语言“最难啃”的三块硬骨头!你知道吗?
- idea解决代码冲突与乱码
- springboot2.0 配置自定义提示功能依赖