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

中文网站建设技术解决方案佛山快速排名seo

中文网站建设技术解决方案,佛山快速排名seo,投票网站开发,wordpress内部邮件插件文章目录 1、什么是intern#xff1f;2、经典例题解释例1例2例3 1、什么是intern#xff1f; String::intern()是一个本地方法#xff0c;它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串#xff0c;则返回代表池中这个字符串的String对象的引用#… 文章目录 1、什么是intern2、经典例题解释例1例2例3 1、什么是intern String::intern()是一个本地方法它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串则返回代表池中这个字符串的String对象的引用否则会将此String对象包含的字符串添加到常量池中并且返回此String对象的引用。----书上描述 已经包含。。。可能不太好理解。我画图解释 方法的执行顺序肯定是从下向上依次执行的。 String s1 “11”; 先去字符串常量池中查看是否已经存在“11”如果存在则直接返回11的地址如果不存在则会在字符串常量池中创建“11”然后返回创建好的“11”的地址。因为之前未创建过所以该指令会先去字符串常量池中创建“11”然后返回11的地址 501。 String s2 new String(“11”); 也是先去字符串常量池中查看是否已经存在“11”如果有就在堆中创建对象存的是字符串常量池中“11”的地址501最后将堆中对象的地址601返回给S2 。 String s3 s2.intern(); intern方法会从字符串常量池中查询当前s2字符串11是否存在若不存在就会在字符串常量池中创建字符串11的实例 由于s1已经在字符串常量池中已经创建了“11”s2.intern()则返回501。 System.out.println(s1s2); System.out.println(s1s3);false trues1s2 返回false是因为s1指向的是字符串常量池中的11对象501而s2指向的是堆中存储了11的地址的对象601 s1s3 返回true 是因为s3和s1都指向的是字符串常量池中的11。 对String srt new String(“str”)与 str1 ”str“的区别不了解的话可以看篇文章 2、经典例题解释 例1 //1 String s new String(1); //2 s.intern();//调用此方法之前字符串常量池中已经存在了1. //3 String s2 1; //4 System.out.println(ss2);执行1会创建两个对像在字符串常量池中创建一个”1“在堆中创建一个String对象并存储“1”在字符串常量池中的的地址。执行2调用此方法之前字符串常量池中已经存在了1所以此指令什么都没做此时s指向堆中的对象。执行3由于字符串常量池中已经存在了“1”所以不需要再创建返回“1”的地址s2指向字符串常量池中的”1“。执行4由于s指向堆中对象s2指向字符串常量池中的对象所以打印结果是false。 这是比较简单的例子 下面上强度了 例2 //1String s3 new String(1)new String(1);//2s3.intern();//3String s4 11;//4System.out.println(s3s4);执行1会在堆中创建两个存储字符串”1“的地址的对象和一个字面量为”11“的String对象在字符串常量池中创建一个”1“字符串实例。 在编译期间在创建String对象之前会先创建一个StringBuilder对象后面每次在堆中创建完一个String对象会对该字符串执行LDC指令LDC指令会先到字符串常量池中查找是否存在对应字符串实例的引用如果有的话那么直接返回这个字符串实例的地址给堆中的new的String对象如果没有的话会创建一个字符串实例然后将其添加到字符串常量池中之后再返回这个字符串实例对象的地址给堆中创建的对象。完成String对象初始化后都会执行StringBuilder::append()方法将该字符串拼接到StringBuilder对象里。当都拼接完会执行StringBuilder::toString()方法返回一个在堆中新new的String对象value为11。 可以通过编译后的字节码文件清晰的观察整个过程 标注的都是刚才介绍的行为。 执行2由于toString()方法只在堆中创建了一个”存储11的String对象并没有在字符串常量池中创建11字符串实例。按之前的说法intern应该去字符串常量池中创建字符串”11“的实例但是在JDK7中并没有在字符串常量池中创建字符串11的实例由于堆中已经存在了11这个String对象那么为了节省空间会在字符串常量池中申请一块空间存放这个String对象的地址并返回存放的地址也就是堆中存储11的String对象的地址。 执行3会去字符串常量池中查找是否存在11,因为第二行已经在字符串常量池中创建了存储堆中存储11的String对象的地址的空间则直接返回空间里面存储的堆中String对象的地址所以s4也指向了堆中存储11的String对象。 由于s3和s4都指向堆中同一个对象所以打印结果为true。 如图所示 通过debug可以看到两个句柄指向的地址是一样的 打印结果 例3 //1String s3 new String(1)new String(1);//2String s4 11;//3s3.intern();//4System.out.println(s3s4);第一行执行结果与例2的第一行执行结果一致。执行2由于字符串常量池中还没有11,则向字符串常量池中创建字符串11的实例并返回实例的地址。执行3由于字符串常量池中已经存在11,则不需要再创建返回实例的地址但由于没有赋值操作所以该行代码没有什么作用。此时s3指向堆中存储了“11”的String对象而s4指向的是字符串常量池中字符串为11的实例所以指向的地址不同打印结果为false 通过debug可以看到两个句柄指向的地址是不同的 打印结果
http://www.hkea.cn/news/14335876/

相关文章:

  • 网站建设语asp外贸网站建设招聘
  • 上海建设局官方网站长春网站建设58同城
  • 上海做兼职的网站黄骅港吧
  • 网站建设中gif有没有免费的网站推销产品
  • 范县网站建设费用织梦5.7cms照明灯具能源电子产品企业网站源码企业模板带后台
  • 深圳做网站的公司哪个好外贸都是在哪些网站做
  • 怎么看网站有没有被收录国内永久免费crm系统网站推荐
  • 网站建设预付怎么做微网站推广
  • 如何做教育网站如何选网站服务器
  • 开一个做网站的公司赚钱吗创新的福州网站建设
  • 一个网站的建设需要什么时候开始可以做设计兼职的网站有哪些
  • 为歌手做的个人网站网站页面设计多少钱
  • 南京哪公司建设网站做网站需要学多久
  • 设计师每天都上的网站wordpress快站
  • 怎么开发自己的网站国防教育网站建设说明书
  • 公司做网站计入什么科目东莞模板建站平台
  • 美橙建站怎么样如何优化wordpress
  • 个人主页静态网站旧域名找新域名的方法
  • 深圳建设局网站制作网页的的网站
  • 网站开发公司组织架构iis网站主目录
  • 济宁那家做网站最好wordpress 主题 设置
  • 大战网站建设wordpress电影模版
  • 展示型网站建设标准晋江市建设局网站
  • 做venn图网站网站建设对电子商务中的作用
  • 标准件做啥网站企业网站建设好的例子
  • 福州市建设管理处网站网站设计平台及开发工具
  • 科讯网站模版网做网站一定要公司备案吗
  • wordpress+瀑布流加载网站排名优化软件电话
  • 桌面网站怎么做网站目标定位概念
  • 用什么网站做封面最好微信广告投放推广平台