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

字符串的原理

目录

 

1.字符串储存的内存原理

2.== 号比较的到底是什么?

3.字符串拼接的底层原理

 4.StringBulider提高效率原理图

5.StringBuilder 源码分析


 

1.字符串储存的内存原理

直接赋值会复用字符串常池中的

new出来不会复用,而是开辟一个新的空间

2.== 号比较的到底是什么?

基本戴数据类型比较数据值

引用数据类型比较地址值

3.字符串拼接的底层原理

第一类:没有变量参与

字符串直接相加,编译之后就是拼接之后的结果了,会复用串池中的字符串

第二类:有变量参与 

 会创建新的字符串,浪费内存

结论:如果很多字符串变量拼接,不要直接+。在底层会创建多个对象,浪费时间,浪费性能

 4.StringBulider提高效率原理图

所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存

字符串拼接的时候,如果有变量:

JDK8以前:系统底层会创建一个StringBuilder对象,然后再调用其append方法完成拼接,

拼接后,再调用tostring 方法转换为String类型,而toString方法 的底层直接new 了一个字符串对象

JDK8版本:系统会预估要字符串拼接之后的大小,把拼接的内容都放在数组中,此时也是产生一个新的字符串

5.StringBuilder 源码分析

默认创建一个长度为16的字节数组

添加的长度小于16,直接存

添加的内容大于16会扩容(原来的容量* 2  +2)

如果扩容长度还不够,以实际长度为准

public class w{
    public static void main(String[] args) {
        //容量:最多装多少
        //长度:已经装了多少
        StringBuilder sb = new StringBuilder();

        System.out.println(sb.capacity());
        System.out.println(sb.length());
        sb.append("abc");

        System.out.println(sb.capacity());
        System.out.println(sb.length());

    }
}

运行结果

16
0
16
3

 

 


http://www.kler.cn/a/568502.html

相关文章:

  • 水果识别系统 | BP神经网络水果识别系统,含GUI界面(Matlab)
  • 数学建模:MATLAB极限学习机解决回归问题
  • 大白话页面加载速度优化的工具与实践案例
  • 从头开始学SpringMVC—04文件处理拦截器异常处理执行流程
  • JavaScript 输入输出语句
  • HumanPro逼真角色皮肤面部动画Blender插件V1.1版
  • 蓝桥杯备考:从记忆化搜索到动态规划
  • 微服务学习(5):消息转换器由JDK序列化——JSON序列化
  • ArcGIS Pro实战技巧:灵活运用线条精准分割与裁切面要素
  • 每日学习Java之一万个为什么?(Maven篇+RPC起步+CICD起步)(待完善)
  • 力扣27.移除元素(双指针)
  • Ubuntu显卡服务器黑屏无响应的维护日志
  • [C#]C#移动文件报错完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符
  • 基于固定点数物理引擎的盒型碰撞器设计与实现分析
  • Qt中的事件模型
  • 【AI绘画】黑白木刻之希腊神话系列(一丹一世界)
  • MYSQL增删改查操作
  • 策略模式环境类的实现方式对比
  • 优博讯,蓝禾,三七互娱,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮,高途教育25届春招内推
  • Spring Security 如何防止 CSRF 攻击?