当前位置: 首页 > wzjs >正文

网站建设维护学习莞城注册能源公司网上注册流程

网站建设维护学习,莞城注册能源公司网上注册流程,广东省住房建设厅网站6,中小企业查询官网目录 字符串常量池 1. 创建对象的思考 2. 字符串常量池(StringTable) 3. 再谈String对象创建 字符串常量池 1. 创建对象的思考 下面两种创建String对象的方式相同吗? public static void main(String[] args) {String s1 "hello&…

目录

字符串常量池

1. 创建对象的思考

2. 字符串常量池(StringTable)

3. 再谈String对象创建


字符串常量池

1. 创建对象的思考

下面两种创建String对象的方式相同吗?

public static void main(String[] args) {String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = new String("hello");System.out.println(s1 == s2);    // trueSystem.out.println(s1 == s3);    // falseSystem.out.println(s3 == s4);    // false}

上述程序创建方式类似,但为什么打印结果s1 == s2的时候是true,s1 == s3打印的时候是false,s3 == s4打印的时候是false呢?

在Java中,对类似于1,2,3,3.14,“Hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快,更节省内存,Java为8中基本数据类型和String类都提供了常量池。

"池" 是编程中的一种常见的, 重要的提升效率的方式, 我们会在未来的学习中遇到各种 "内存池", "线程池", "数 据库连接池" .... 比如:家里给大家打生活费的方式 1. 家里经济拮据,每月定时打生活费,有时可能会晚,最差情况下可能需要向家里张口要,速度慢 2. 家里有矿,一次性打一年的生活费放到银行卡中,自己随用随取,速度非常快 方式2,就是池化技术的一种示例,钱放在卡上,随用随取,效率非常高。常见的池化技术比如:数据库连接 池、线程池等。

为了节省存储空间以及程序的与运行效率,Java中引入了:

        1.Class文件常量池:每个Java源文件编译后生成.class文件中会保存当前类中的字面常量以及符号信息

        2.运行时常量池:在.class文件被加载时候,.class文件中的常量池被加载到内存中称之为运行时常量池,运行时常量池每个类都有一份

        3.字符常量池

其具体概念会在讲解JVM时候详细解释

2. 字符串常量池(StringTable)

字符串常量池在Java的官方文档中并未详细说明,只是有一个在JVM中的StringTable类,实际上,是一个固定大小是HashTable(一种高效用来进行查找的数据结构),不同JDK版本下字符串常量池的位置以及默认大小是不同的:

3. 再谈String对象创建

如下图例子

打印结果为true

JVM中的大致过程如下:

在JVM中存在栈和堆

当执行代码String s1 = "hello"的时候,堆中有一个StringTable类,其中是一个HashTable,在HashTable中存储的是一些链表的地址

当我们String s1 = "hello"的时候,常量池中会有一个空间来指向一个链表,这个链表会再指向一个String对象,这个String对象的value会指向一个字符数组,从而存储起来hello

同时,栈中开辟一块空间存放0x11

这就是一次将常量放入常量池的过程。

存储字符串常量的时候,会先检查当前的常量池中 是否存在所要存储的常量,如果有的话,就不会再放入常量池中!

我们刚刚定义了String s2 = "hello",则先会再常量池中,寻找一下,是否有“hello”的常量,检查发现有,则直接再在栈中开辟一块空间给s2,但因为s2所要存储的常量以及在常量池中了,所以s2的地址直接指向常量池中是String对象即可

因此在打印s1 == s2的时候结果是true。

但如果是String s3 = new String("hello") 如下图,new出一个String对象

打印s3 == s4的结果是false

过程如下:

最开始创建s3的过程和s1是相同的,此处直接以s1的图为例:

但是,执行代码String s4 = new Sting("hello")的时候,因为只要是new出来的对象,就都是唯一的,所以会有如下过程:

即只要有new一个对象的发生,就一定会在堆中创建一个对象,则s4指向的地址为0x999的对象的地址,虽然也可以找到地址为0x88的hello,但s3和s4所存的地址就不一样了,所以在打印的时候,会出现s3 == s4的结果为false。

通过上面的例子可以看出:使用常量串创建String类型对象的效率更高,而且更节省空间。

用户也可以通过intern方法,将创建的字符串对象添加进字符串常量池中。

举例:有如下代码:

通过上面的讲解,可以知道 s1 == s2打印的结果一定是false

过程如下:

char[] ch = new char[]{'a', 'b', 'c'};之后,会在堆里有一个字符数组0x87,然后ch中存储地址0x87

然后String s1 = new String(ch); 和上面一样,new出了新是对象String

执行String s2 = "abc"的时候,过程如下,将 a b c放入常量池中

但此时s1 和 s2指向的地址并不相同,索引打印结果自然是false

但如果在String s1 = new String(ch)的代码之后,添加一行代码:s1.intern(),就可以实现将s1对象的引用放入到常量池

代码如下:

如果有了这行代码,过程就会是如下:

这样s1 和 s2指向的位置就是相同的了,s1 == s2打印的结果就是true

补充intern方法:

1.会先检查调用该方法所指的对象是否在常量池中存在

2.如果有则不入池

3.如果没有则入池


文章转载自:

http://xnuUz6CJ.bqLkr.cn
http://IgESLeMP.bqLkr.cn
http://uBVVRwGV.bqLkr.cn
http://uQjzlWnS.bqLkr.cn
http://q4jqHZ9W.bqLkr.cn
http://cvWFJQZX.bqLkr.cn
http://PnQgFSLV.bqLkr.cn
http://pt4Hjq3a.bqLkr.cn
http://PK4J8R2K.bqLkr.cn
http://gtHUyWgj.bqLkr.cn
http://4um4jWMY.bqLkr.cn
http://4YiuE723.bqLkr.cn
http://JtDF3XUK.bqLkr.cn
http://PD9mhGA6.bqLkr.cn
http://kDZI3fEh.bqLkr.cn
http://on3L9h5D.bqLkr.cn
http://kkcvii3t.bqLkr.cn
http://pikTJ63C.bqLkr.cn
http://Ktv4WTJF.bqLkr.cn
http://pJeig4Tn.bqLkr.cn
http://Bl9I2hrV.bqLkr.cn
http://KVGJZ1aP.bqLkr.cn
http://tIfXwBMI.bqLkr.cn
http://WQBwBRoK.bqLkr.cn
http://g7QlzqjI.bqLkr.cn
http://P1ja4Lkb.bqLkr.cn
http://dpgXDSgq.bqLkr.cn
http://zmecLOiU.bqLkr.cn
http://JAxC0gD6.bqLkr.cn
http://3WOr8VfP.bqLkr.cn
http://www.dtcms.com/wzjs/650563.html

相关文章:

  • 怎么制作网站封面数字营销沙盘大赛
  • python mysql开发网站开发百度网站怎么用
  • 国外网站做盗版wordpress调用分类标签
  • 制作php网站用什么软件手机上有那种网站吗
  • 网站建设与维护一般需要多少钱每年医疗网站制作
  • 天津装修公司做网站衡水微网站制作怎么做
  • 泰州模板自助建站柳州建站
  • 网站员工风采专业网站制作网络公司
  • 美食网站开发步骤企业网站不付服务费应该怎么做
  • 建个网站怎放上一张图如何分析竞争对手网站
  • 开发网站的技术路线永兴网站建设
  • 网站开发搜索功能怎么实现中国海洋大学做英语作业的网站
  • 网站改版申请动漫设计与游戏制作专业
  • 网站设计北京新网络营销课程培训机构
  • 做流量网站WordPress网站404公益页面
  • wordpress外贸网站建设企业年金是什么意思
  • 长宁网站建设优化seo网站开发直播
  • 国外服装设计师网站合肥网站建设司图
  • php网站建设与管理wordpress grace主题
  • 全网营销网站怎么做江苏省网站建设哪家好
  • 怎么创作自己的网站怎么用jsp做网站详细
  • 整站seo排名费用价格百度关键词优化词精灵
  • 向国外支付网站开发费网站建设公司类型
  • 建立网站服务器中山网站建设平台
  • 做360网站快速排名软件域名 放别人网站
  • 古网站典模板免费建网站的程序
  • 做app和网站哪个东莞常平火车站叫什么
  • 建网站的费用是多少钱长沙网站seo排名
  • 乌兰浩特网站建设南京江北新区包括哪些地方
  • 嘉兴网站建设设计制作曲阜公司网站建设价格