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

关于政府网站建设的研究报告建站系统有哪些

关于政府网站建设的研究报告,建站系统有哪些,长春有什么好的网站制作公司,18款未成年禁止下载的app文章目录 1、什么是intern?2、经典例题解释例1例2例3 1、什么是intern? String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用&#…

文章目录

  • 1、什么是intern?
  • 2、经典例题解释
    • 例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(s1==s2);
System.out.println(s1==s3);false
true

s1==s2 返回false是因为s1指向的是字符串常量池中的"11"对象(501),而s2指向的是堆中存储了"11"的地址的对象(601)
s1==s3 返回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(s==s2);
  • 执行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(s3==s4);
  • 执行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(s3==s4);
  • 第一行执行结果与例2的第一行执行结果一致。
  • 执行2,由于字符串常量池中,还没有"11",则向字符串常量池中创建字符串"11"的实例,并返回实例的地址。
  • 执行3,由于字符串常量池中已经存在"11",则不需要再创建,返回实例的地址,但由于没有赋值操作,所以该行代码没有什么作用。
  • 此时,s3指向堆中存储了“11”的String对象,而s4指向的是字符串常量池中字符串为"11"的实例,所以指向的地址不同打印结果为false
    通过debug可以看到两个句柄指向的地址是不同的:
    在这里插入图片描述
    打印结果:
    在这里插入图片描述
http://www.zhongyajixie.com/news/5762.html

相关文章:

  • 小说网站的会员充值是怎么做的百度免费发布信息
  • 网站建设的安全性问题浑江区关键词seo排名优化
  • 30岁转行做网站设计电商网站建设
  • 互联网网站建设价格软文推广代表平台
  • html5做图网站公司业务推广
  • 百度智能云windows系统服务器建站网站模板库
  • 网站里的图片是怎么做的如何做推广和引流
  • 2018外贸网站排名百度seo快速排名优化
  • 会设计网站怎么做兼职信阳百度推广公司电话
  • 安康做网站网站建设解决方案
  • 网站建设设计时代创信好sem是什么品牌
  • 桂林网站优化价格武汉seo建站
  • Wordpress额外的css类宝鸡seo
  • 建设网站需要注意什么问题铜陵seo
  • 网站建设对教育解决方案网站搜索优化排名
  • 网站服务器架设保定seo排名外包
  • 网站建设项目选题平台推广策略都有哪些
  • vs网站中的轮播怎么做站长之家怎么用
  • 个人备案 什么网站线上招生引流推广方法
  • vs2017 做网站八上数学优化设计答案
  • 开平做网站网站服务器一年的费用
  • 做网站怎样投放广告网店培训机构
  • 成都政府网站建设词语搜索排行
  • 贵州企业网站建设设计济南最新消息今天
  • 庄河网站怎么举报做棺材seo关键词优化系统
  • win2012做网站河南做网站的
  • 嘉兴做网站seo广州信息流推广公司排名
  • 靠谱的网络建站公司关键词排名优化顾问
  • 本地做网站图片怎么存网络营销十大成功案例
  • 什么网站可以做全景图百度链接提交入口