首页 > 其他分享 >String系列-创建对象及其原理

String系列-创建对象及其原理

时间:2024-11-06 09:17:56浏览次数:3  
标签:abc 系列 String 创建对象 池中 new def 常量

1.字面量+字面量

例:String s1 = "abc" + "def";

创建对象个数:1个-->常量池中:"abcdef"

原因:对于字符串常量 "abc" 和 "def" ,在进行拼接操作 "abc" + "def" 时,在编译期就会进行优化。Java编译器会识别出这是两个常量字符串的拼接,并在编译时直接将其计算为 "abcdef" ,然后将这个结果字符串放入字符串常量池中。整个过程只在常量池中创建了一个 "abcdef" 字符串对象。

2.字面量+对象+字面量

例:String s1 = "abc";

        String s2 = "abc" + s1 + "def";

创建对象个数:3个-->常量池中:"abc"、"def"

                                        堆中:"abcabcdef"

原因:String s1 = "abc";创建了一个String对象"abc",并将其放入常量池中;

           String s2 = "abc" + s1 + "def"; "abc"对象在常量池中已经有了,直接将其拿出用即可;s1是引用地址,指向了 "abc" ,即 s1 = = "abc" 为true;创建了一个String对象 "def" 并将其放入常量池中;在堆中创建对象 "abcabcdef" ,因为s1是变量,当字符串拼接操作遇到字符串变量时,Java会创建一个新的String对象并放入堆中,而不是常量池中,这是因为Java不能确定这个拼接的结果在程序的其他地方是否会被修改(在编译期不能确定结果),所以不能放入常量池中。

3.new String("xx") + new String("xx")

例:String s = new String("abc") + new String("abc");

创建对象个数:4个-->常量池中:"abc"

                                        堆中:3个

原因:JVM先在String池中创建一个String对象存储"abc";遇到new关键字则在堆中创建一个String对象存储"abc",其 char value[ ]指向了String池中的 char value[ ];第二个new关键字只在堆上创建了一个String对象存储"abc"(因为new操作符总是在堆上分配新的内存空间),因为String池中已经有 "abc" 了;最后进行字符串拼接操作,在堆上创建一个String对象 "abcabc"。

4.字面量 + new String("xx")

例:String s = "abc" + new String("def");

创建对象个数:4个-->常量池中:"abc"、"def"

                                        堆中:2个

原因:JVM先在String池中创建两个String对象分别存储 "abc"、"def" ;遇到new关键字则在堆中创建一个String对象存储 "def",其char value[ ]指向了常量池中的 cahr value[ ];最后拼接在堆上创建一个String对象 "abcdef"

标签:abc,系列,String,创建对象,池中,new,def,常量
From: https://blog.csdn.net/weixin_63172268/article/details/143524256

相关文章

  • M4)_16. Kinetis K系列的未来发展趋势
    16.KinetisK系列的未来发展趋势随着技术的不断进步,KinetisK系列单片机(MCU)也在不断地发展和演进。本节将探讨KinetisK系列的未来发展趋势,包括性能提升、功耗优化、安全性增强、生态系统扩展以及新兴应用领域的探索。16.1性能提升KinetisK系列基于ARMCortex-M4内核......
  • LPC1100 系列_1.简介与入门
    1.简介与入门1.1LPC1100系列概述LPC1100系列是NXP推出的一款基于ARMCortex-M0内核的低功耗、高性能单片机。该系列单片机适用于各种嵌入式应用,包括传感器网络、工业控制、消费电子和医疗设备等。LPC1100系列的主要特点包括:低功耗:具有多种低功耗模式,适用于电池......
  • 科普文:软件架构Linux系列之【图解存储 IO性能优化与瓶颈分析】
    概叙科普文:软件架构Linux系列之【Linux的文件预读readahead】-CSDN博客科普文:软件架构Linux系列之【并发问题的根源:CPU缓存模型详解】-CSDN博客从上面冯诺依曼结构下的cpu、内存、外存之间的延迟就可以看出,磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的......
  • LPC1100 系列_2.架构与硬件特性
    2.架构与硬件特性2.1架构概述LPC1100系列是NXP公司基于ARMCortex-M0内核的微控制器系列。ARMCortex-M0是ARM公司推出的一款低功耗、高性能的32位RISC处理器内核,适用于嵌入式系统和微控制器应用。LPC1100系列微控制器采用了Cortex-M0内核,具有以下主要......
  • 欧姆龙PLC与西门子1200/1500系列PLC利用FinsTCP通讯,欧姆龙无需编程。
     一、前提准备1、欧姆龙PLC支持FinsTcp。欧姆龙系列大部分支持2、西门子1200/1500系列3:软件 欧姆龙CX-ONE与西门子博图二、基于TCPIP开发(软件调试)1、系统概述系统概述,硬件搭建和接线本案例中CJ1W-ETN21模块IP地址为10.110.59.33;计算机 IP地址为10.110.59......
  • Java入门十二——static详解(含toString)
    上节课,我们只是微微提到了static,今天我们来具体讲讲static的用法static1.类名.静态成员变量(上篇博客Java入门十一有讲)为了方便大家查看,我把链接放在这里Java入门11——关键字总结+static-CSDN博客2.类名.静态成员方法这里,我们首先创建两个类,分别是java12和demo1,然后调用d......
  • SATA系列专题之五:Link Power Management解析
     一、故事前传在之前的文章中,我们已经针对SATA的主要结构进行了较为详细的解析,详见前期文章:1,浅析SATAPhysicalLayer物理层OOB信号;2,SATALinkLayer链路层解析2.0-2.3;3,SATATransportLayer传输层解析3.0-3.4;4,SATACommandLayer命令层解析4.0-4.1;我们这里主要解......
  • PCIe系列专题之二:2.0 Transaction layer事务层概述
    一、故事前传上回我们对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:PCIe技术概述;二、事务层概述......
  • PCIe系列专题之二:2.1 TLP的前世今生
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.2 TLP事务处理方式解析
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......