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

网站如何做用户的实名认证苏州建设培训中心

网站如何做用户的实名认证,苏州建设培训中心,直播类app开发公司,中卫网站制作公司目录 一、基本概念1.1 说明1.2 特点 二、存放位置2.1 JDK1.6及以前2.2 JDK1.72.3 JDK1.8及以后 三、工作原理3.1 创建字符串常量3.2 使用new关键字创建字符串 四、intern()方法4.1 作用 五、优点六、字节码分析6.1 示例16.1.1 代码示例6.1.2 字节码6.1.3 解析 6.2 示例26.2.1 代… 目录 一、基本概念1.1 说明1.2 特点 二、存放位置2.1 JDK1.6及以前2.2 JDK1.72.3 JDK1.8及以后 三、工作原理3.1 创建字符串常量3.2 使用new关键字创建字符串 四、intern()方法4.1 作用 五、优点六、字节码分析6.1 示例16.1.1 代码示例6.1.2 字节码6.1.3 解析 6.2 示例26.2.1 代码示例6.2.2 分析jdk8 6.3 示例36.3.1 代码示例6.2.2 分析jdk8 一、基本概念 1.1 说明 1.JVM字符串常量池是Java虚拟机JVM中一个特殊的内存区域。 2.JVM字符串常量池用于存储字符串常量。 3.提高性能和减少内存开销。 4.字符串常量池是JVM用于存储字符串常量的一个内存区域避免了相同字符串的重复创建节省内存空间。 1.2 特点 1.字符串常量池中的字符串对象是不可变的。 2.相同的字符串常量在池中只存储一份通过引用共享。 二、存放位置 2.1 JDK1.6及以前 1.字符串常量池存放在永久代中永久代是非堆内存的一部分用于存储类的元数据、常量、静态变量等。 2.2 JDK1.7 1.字符串常量池从永久代移动到了Java堆中而运行时常量池保留在永久代中。 2.这一变化为了适应永久代内存限制问题并提升性能。 2.3 JDK1.8及以后 1.永久代被移除取而代之的是元空间字符串常量池仍然位于Java堆中。 2.运行时常量池被移动到元空间。 三、工作原理 3.1 创建字符串常量 1.使用双引号创建字符串时(String a “123”; )JVM会首先在字符串常量池中查找是否已存在该字符串。 2.如果存在则直接返回池中该字符串的引用。 3.如果不存在则在常量池中创建该字符串的实例并返回其引用。 3.2 使用new关键字创建字符串 1.使用new关键字创建字符串对象如String str new String(“abc”);时JVM会在堆内存中创建一个新的字符串对象而不管字符串常量池中是否已存在相同的字符串。 2.如果需要可以通过调用intern()方法将新创建的字符串对象放入常量池中。 四、intern()方法 4.1 作用 1.intern()方法是String类的一个本地方法。 2.用于将字符串对象添加到字符串常量池中。 3.如果常量池中已经包含了一个等于此String对象的字符串使用equals(Object)方法确定则返回代表池中这个字符串的String对象的引用。 4.否则将此String对象包含的字符串添加到常量池中并返回此String对象的引用。 五、优点 1.节省内存通过共享相同的字符串常量避免了不必要的重复创建。2.提高性能减少了对象创建和垃圾回收的开销。3.简化字符串比较由于字符串常量池中的字符串是唯一的可以使用操作符来比较字符串的引用从而简化比较操作。 六、字节码分析 6.1 示例1 6.1.1 代码示例 Test public void test(){String str1 new String(hello) new String(world);String str2 helloworld;System.out.println(str1 str2); }6.1.2 字节码 0 new #2 java/lang/StringBuilder3 dup4 invokespecial #3 java/lang/StringBuilder.init : ()V7 new #4 java/lang/String 10 dup 11 ldc #5 hello 13 invokespecial #6 java/lang/String.init : (Ljava/lang/String;)V 16 invokevirtual #7 java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder; 19 new #4 java/lang/String 22 dup 23 ldc #8 world 25 invokespecial #6 java/lang/String.init : (Ljava/lang/String;)V 28 invokevirtual #7 java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder; 31 invokevirtual #9 java/lang/StringBuilder.toString : ()Ljava/lang/String; 34 astore_1 35 ldc #10 helloworld 37 astore_2 38 getstatic #11 java/lang/System.out : Ljava/io/PrintStream; 41 aload_1 42 aload_2 43 if_acmpne 50 (7) 46 iconst_1 47 goto 51 (4) 50 iconst_0 51 invokevirtual #12 java/io/PrintStream.println : (Z)V 54 return6.1.3 解析 1. 0 new #2 java/lang/StringBuilder: 调用StringBuilder的new方法 2. 3 dup复制操作数栈栈顶的一个字通常是对象引用或数据类型值并将这个字重新压入栈顶。 3. 4 invokespecial #3 java/lang/StringBuilder. : ()V执行StringBuilder的初始化方法会消耗操作数栈顶一个字。 4. 7 new #4 java/lang/Stringnew一个String对象对象的引用压入操作数栈。 5. 10 dup复制操作数栈栈顶的一个字通常是对象引用或数据类型值并将这个字重新压入栈顶。 6. 11 ldc #5 加载栈顶的一个字即hello。 7. 13 invokespecial #6 java/lang/String. : (Ljava/lang/String;)V初始化String,消耗一个string对象的引用和复制的字。 8. 16 invokevirtual #7 java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder; : append操作将hello追加进来。 9. 19 new #4 java/lang/String new一个String对象对象的引用压入操作数栈。 10. 22 dup复制操作数栈栈顶的一个字通常是对象引用或数据类型值并将这个字重新压入栈顶。 11. 23 ldc #8 : 加载栈顶的一个字即world。 12. 25 invokespecial #6 java/lang/String. : (Ljava/lang/String;)V初始化String,消耗一个string对象的引用和复制的字。 13. 28 invokevirtual #7 java/lang/StringBuilder.append : (Ljava/lang/String;)Ljava/lang/StringBuilder; append操作将world追加进来。 14. 31 invokevirtual #9 java/lang/StringBuilder.toString : ()Ljava/lang/String; 调用StringBuilder的toString方法 15. StringBuilder的toString方法中是直接new了一个String对象。 16. 而String str2 “helloworld”;是常量池的引用。 17. 因此不是同一个内存地址所以结果是false。 6.2 示例2 6.2.1 代码示例 Testpublic void test(){String str1 new String(hello) new String(world);str1.intern();String str2 helloworld;System.out.println(str1 str2);}6.2.2 分析jdk8 1.str1是直接new了一个对象执行intern()方法后将字符串对象添加到字符串常量池中。 2.String str2 “helloworld”;会先在字符串常量池中找是否有如果有则返回其对象的引用。 3.所以结果是true。 6.3 示例3 6.3.1 代码示例 Testpublic void test(){String str1 new String(helloworld) ;String str2 helloworld;String intern str1.intern();System.out.println(str1 str2);System.out.println(str1 intern);System.out.println(str2 intern);}6.2.2 分析jdk8 1.str1在堆上new了一个string对象。 2.str2是将字面量“helloworld”放入字符串常量池中。 3.str1调用intern方法判断字符串常量池中有没有helloworld,发现有返回了该字符串常量池的引用即str2。 4.此时str1不等于str2。str2和intern是相等的。
http://www.hkea.cn/news/14384878/

相关文章:

  • 做网站做58好还是赶集好wordpress注册完成请检查电子邮件
  • 网站软文制作淘宝内部优惠券网站怎么做
  • 西樵网站制作四川seo多少钱
  • 如何优化网站关键字如何做网签合同 网站
  • 章丘做网站天眼查企业查询官网网页版
  • 怎样租用个人网站空间黄骅港股票代码
  • dw网站设计模板商业综合体
  • 制作网页的网站的软件是简述网站一般建设的流程
  • php 网站 服务器wordpress标签图片不显示
  • 本溪网站开发公司搜狗收录提交
  • 网站开发女生工资dw做单页网站教程
  • 网站短期电脑培训班学费discuz可以做门户网站么
  • 上海网站建设方案托管wordpress关闭电脑访问
  • 哪个网站上可以做外贸公司网站建设进度计划书
  • seo整站优化哪家好网站的主要功能模块
  • 采购网站有哪些小程序模板消息推送
  • 寿光网站建设公司免费海报背景素材
  • 设置网站建设天津市建设工程合同备网站
  • 网站备案代码如何加到驻马店住房和城乡建设厅网站
  • 包装公司网站模板下载提供医疗网站建设
  • 做公众号和网站主页的区别wordpress 4.7.3
  • vps能同时做网站同时做其它事吗高校网站如何建设
  • 北京网站模板建设网站的push运营怎么做
  • 长春网站建设方案优化网站模板预览
  • 关于做网站的宠物网站建设方案书
  • 南充高端网站建设沧州网络营销网络宣传业务
  • 为什么很多网站用php做分销渠道系统
  • 做网站需要掌握梧州外贸网站推广设计
  • 淘宝网站怎么建设房地产网站的设计要求
  • 扁平化设计风格的网站模板node.js做网站好累