字符串存储的内存原理

  • 字符串存储的内存原理
  • 字符串拼接的底层原理
  • StringBuilder提高效率原理图
  1. 字符串存储的内存原理
  • 直接赋值

    1)等号右边没有变量:

        javac在编译class文件时,会直接拼接字符,此时等同于直接赋值一个字符串即

String s1="a"+"b"+"c"也就等同于String s1="abc";

       2)等号右边有变量:

JDK8以前底层会使用Stringbuilder,详细过程为:

首先main方法先进栈,栈中声明变量S1,String s1= ,由于是直接赋值方式,先检查串池中是否有赋值的字符串,因为没有,将”a“添加至串池中,第二句String s2=s1+"b",同理将”b“添加至串池,因为有变量参与,在堆内存中创建StringBuilder对象,用append()方法将s1和”b“都添加至StringBuilder中。接着通过ToString方法将其转变为字符串。在这里要注意,ToString方法的底层也是通过new对象实现的。使用该方式进行一次字符串连接在栈内存会new两个对象,开辟两个地址空间。

JDK8字符串拼接底层原理,详细过程为:

jdk8对于含变量的字符串拼接采用的方法为先预估一个内存空间,创建一个数组,将变量的值放在数组中,然后在用Tostring方法将其转为字符串。

StringBuilder提高效率原理图:

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值