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

了解网站建设网站设计目的与规划怎么写

了解网站建设,网站设计目的与规划怎么写,北京网站设计 公司新鸿儒,网站运营建设的培训前言 在深入学习字符串类之前#xff0c;我们先搞懂JVM是怎样处理新生字符串的。当你知道字符串的初始化细节后#xff0c;再去写String s hello或String s new String(hello)等代码时#xff0c;就能做到心中有数。 首先得搞懂字符串常量池的概…前言 在深入学习字符串类之前我们先搞懂JVM是怎样处理新生字符串的。当你知道字符串的初始化细节后再去写String s hello或String s new String(hello)等代码时就能做到心中有数。 首先得搞懂字符串常量池的概念下面进入正文吧。 常量池 把经常用到的数据存放在某块内存中避免频繁的数据创建与销毁实现数据共享提高系统性能。 八种基础数据类型除了float和double都实现了常量池技术。在近代的JDK版本中(1.7后)字符串常量池被实现在Java堆内存中。 下面通过三行代码让大家对字符串常量池建立初步认识 public static void main(String[] args) {String s1 hello;String s2 new String(hello);System.out.println(s1 s2); //false }先来看看第一行代码String s1 hello; 直接通过双引号 String s1 “hello”声明字符串的方式虚拟机首先会到字符串常量池中查找该字符串是否已经存在。如果存在会直接返回该引用如果不存在则会在堆内存中创建该字符串对象然后到字符串常量池中注册该字符串。 上面的代码中 String s1 “hello”虚拟机首先会到字符串常量池中查找是否有存在hello字符串对应的引用。发现没有后会在堆内存创建hello字符串对象(内存地址0x0001)然后到字符串常量池中注册地址为0x0001的hello对象也就是添加指向0x0001的引用。最后把字符串对象返回给s1。 下面看String s2 new String(hello); 当我们使用new关键字创建字符串对象的时候JVM将不会查询字符串常量池它将会直接在堆内存中创建一个字符串对象并返回给所属变量。 所以s1和s2指向的是两个完全不同的对象判断s1 s2的时候会返回false。 再来看下面的示例 public static void main(String[] args) {String s1 new String(hello ) new String(world);s1.intern();String s2 hello world;System.out.println(s1 s2); //true }第一行代码String s1 new String(hello ) new String(world);的执行过程是这样子的 依次在堆内存中创建hello和world两个字符串对象 然后把它们拼接起来 (底层使用StringBuilder实现) 在拼接完成后会产生新的hello world对象这时变量s1指向新对象hello world。 执行完第一行代码后内存是这样子的 第二行代码s1.intern(); 当调用intern()方法时首先会去常量池中查找是否有该字符串对应的引用如果有就直接返回该字符串 如果没有就会在常量池中注册该字符串的引用然后返回该字符串。 由于第一行代码采用的是new的方式创建字符串所以在字符串常量池中没有保存hello world对应的引用虚拟机会在常量池中进行注册注册完后的内存示意图如下 第三行代码String s2 hello world; 首先虚拟机会去检查字符串常量池发现有指向hello world的引用。然后把该引用所指向的字符串直接返回给所属变量。 执行完第三行代码后内存示意图如下 如图所示s1和s2指向的是相同的对象所以当判断s1 s2时返回true。 总结 当用new关键字创建字符串对象时不会查询字符串常量池 当用双引号直接声明字符串对象时虚拟机将会查询字符串常量池。 说白了就是字符串常量池提供了字符串的复用功能除非我们要显式创建新的字符串对象否则对同一个字符串虚拟机只会维护一份拷贝。 反编译代码 下面我们再来看一个示例 public class Main {public static void main(String[] args) {String s1 hello ;String s2 world;String s3 s1 s2;String s4 hello world;System.out.println(s3 s4);} }首先第一行和第二行是常规的字符串对象声明它们分别会在堆内存创建字符串对象并会在字符串常量池中进行注册。 影响我们做出判断的是第三行代码String s3 s1 s2;我们不知道s1 s2在创建完新字符串hello world后是否会在字符串常量池进行注册。 简单点说我们不知道这行代码是以双引号形式声明字符串还是用new关键字创建字符串。 那么我们看下这端代码的反编译后的代码 PS D:\code\javaSE\target\classes\demo javap -c .\Main.class Compiled from Main.java public class demo.Main {public demo.Main();Code:0: aload_01: invokespecial #1 // Method java/lang/Object.init:()V4: returnpublic static void main(java.lang.String[]);Code:0: ldc #2 // String hello2: astore_13: ldc #3 // String world5: astore_26: new #4 // class java/lang/StringBuilder9: dup10: invokespecial #5 // Method java/lang/StringBuilder.init:()V13: aload_114: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;17: aload_218: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;24: astore_325: ldc #8 // String hello world27: astore 429: getstatic #9 // Field java/lang/System.out:Ljava/io/PrintStream;32: aload_333: aload 435: if_acmpne 4238: iconst_139: goto 4342: iconst_043: invokevirtual #10 // Method java/io/PrintStream.println:(Z)V46: return }直接看重点 21: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String; 24: astore_3 虚拟机调用StringBuilder的toString()方法获得字符串hello world并存放至s3。 下面是我们追踪StringBuilder的toString()方法源码 Override public String toString() {// Create a copy, dont share the arrayreturn new String(value, 0, count); }通过以上源码可以看出s3是通过new关键字获得字符串对象的。 回到题目也就是说字符串常量表中没有存储hello world的引用当s4以引号的形式声明字符串时由于在字符串常量池中查不到相应的引用所以会在堆内存中新创建一个字符串对象。 所以s3和s4指向的不是同一个字符串对象 结果为false。
http://www.hkea.cn/news/14412976/

相关文章:

  • 百度验证网站所有权滨州网站建设hskj360
  • 中文字体怎么设计网站上海徐汇龙华公司鞋子
  • 站长网网站模板网站做百度推广要多少钱
  • 网站制作效果好卖域名的网站
  • 东莞做网站系统wordpress非常慢
  • 怎样设计网站主页网页编辑软件绿色
  • 网站设计师主要做什么的徐州抖音推广公司
  • 怎么帮客户做网站建站闵行网站建设公司纸
  • 北京大学廉政建设研究中心网站投资项目网
  • 出口网站平台wordpress怎样上传目录本
  • go语言网站开发江门网站建设方案开发
  • 网站维护需要平台和网站有什么区别
  • 微商城网站建设行情网站建设捌金手指花总十八
  • 找素材的网站大全论坛网站开发成本
  • 工信部 加强网站备案网站续费会计分录怎样做
  • 网站建设技术架构酒店加盟什么网站建设
  • 深圳著名设计网站wordpress淘宝主题
  • 个人网站备案信息百度小说排行榜第一名
  • html静态网站模板简单单页建筑人才网下载安装
  • 网站建设推广扬州南宁手机网站设计策划
  • 手机网站建设网站报价水务 网站建设
  • 公司网站建设费放什么科目网页设计尺寸怎么设计
  • 网站大图怎么做更吸引客户南京网站开发建设
  • 网站网络推广服务没有公司可以注册网站吗
  • 芜湖建设网站2手房产App网站开发
  • 制作网页前为什么要建立站点重庆整合营销网站建设
  • 自己做的网站什么时候可以赚钱百度推广优化方案
  • 做网站算 自由职业者wordpress 导入模板
  • 公司网站建设要注意的问题阿里巴巴国际站入驻
  • 用php做企业网站的可行性wordpress检查后门