学校官方网站网页设计网站开发产品设计公司
学校官方网站网页设计,网站开发产品设计公司,网站解析是做a记录吗,广州新媒体运营公司排行榜String 对象可谓再熟悉不过了#xff0c;与此相关的面试题经常会引出内存性能优化的问题#xff0c;本篇主要以 new String(123) 创建了几个对象为例记录。 一、你能回答正确吗 String a 123; 如上定义的为常量#xff1b; String b a 456与此相关的面试题经常会引出内存性能优化的问题本篇主要以 new String(123) 创建了几个对象为例记录。 一、你能回答正确吗 String a 123; 如上定义的为常量 String b a 456; 如上 b 为变量为啥 难道常量拼接常量得到的是变量吗 不是常量拼接常量得到的依旧是常量。 但是此时将 a 作为引用a 已经不再是常量了是变量了所以得到的 b 自然就是变量。 String b 123 456 此时 b 为常量。 如果给 a 加上修饰符 final 那么 a 就是个常量那么 b 就为常量了。 二、String定义常量和变量的区别 我们再来通过两种写法分析 String a 123;String b new String(123); 如上第1行定义了一个常量 a 第2行通过关键字 new 的形式创建了一个变量 b 。 我们结合之前学过的 JVm 再深入一些第1行在常量池开辟了一块空间存放字符串 123通过 a 对象指向这个常量对象。第2行由于使用了 new 关键字所以会在堆空间中开辟一块内存区域在其中存放字符串 123并把内存的地址赋予 b 变量。 所以 ab 吗显示是 false一个是堆内存一个是常量池。 如果将 a 修改成 String a new String(123) 那么ab 吗 依旧是 false。 为什么只要通过 new 形式自然是创建两个对象所以是 false即便是他们的值是一致的。 三、String常量变量的总结 String 常量存放在常量池中jvm处于优化考虑会让内容一致的对象共享内存块但变量是放在堆空间中的new 定义的不同变量内存地址不同。 String 常量连接常量还是常量依旧用常量池管理但常量连接变量就是变量了。 四、创建几个对象的练习 以下几种情况(均不考虑字符串在常量池中已存在的情况) 1、String a123; 创建了1个对象 jvm在编译阶段会判断常量池中是否有 123 这个常量对象如果有a直接指向这个常量的引用如果没有会在常量池里创建这个常量对象。 2、String anew String(123); 创建了2个对象 同情况1jvm编译阶段判断常量池中 123存在与否进而来判断是否创建常量对象然后运行阶段通过new关键字在java heap创建String对象。 3、String a123456; 创建了1个对象 jvm编译阶段过编译器优化后会把字符串常量直接合并成123456所有创建对象时最多会在常量池中创建1个对象。 4、String a123new String(456); 创建了4个对象 常量池对象123 ,456new String(456)创建堆对象还有一个堆对象123456。 最后练习参考文章https://blog.csdn.net/baidu_27969827/article/details/79219708
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88060.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!