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

Java的+号详解 与 字符串拼接的底层逻辑

+号详解:

    1 左右两边是数值型,做加法运算
    2 有一边是字符串,则拼接     
    3 两个字符串相加与两个字符相加截然不同
      数据库性别字段   到底用字符,还是字符串需要考量
      
    注意运算顺序:从左到右运算

字符串拼接的底层逻辑:

        前置知识:Java有字符串常量池的,凡是直接=出来的字符串对象(不是new的)都在常量池中

        全是常量拼接:有编译器的常量优化,相当于直接拼接,没有运算的

        有变量参与:

                Java8前:底层新new一个空stringbuilder对象,然后将=两边一个个放入拼接()调用append方法,每放入一 个就是一个新的stringbuilder对象,最后转为string对象(toString方法,底层就是new String())效率低

                java8后:jvm会估算拼接后的总长度,会先new一个空的stringbuilder对象,然后将=两边的字符串字符放入这个对象的底层数组中(不调用append方法,直接放入底层数组),最后转为string对象(toString方法,底层就是new String()),效率稍微高点

注意1:如果是有大量的字符串拼接,还是用stringbuilder好,不要用+号,否则会创建很多对象(很多stringbuilder对象和中间过程的string对象),影响效率

注意2:字符串常量池的对象和new出来的对象物理地址是不同的,==判断出来也是false-》面试题

                编译器的常量优化:如果字符串常量池有,会直接取,==判断的是true

注意3:stringbuilder底层:

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

        添加内容长度(字符串长度)小于16,直接存入

        大于16,数组会扩容为 原长度*2+2(添加一次,只会扩容一次)

                如果扩容后的长度还不够(先算长度,还每扩容,发现不够),会按实际长度扩容

        


http://www.kler.cn/news/156877.html

相关文章:

  • 二阶变系数线性微分方程
  • 光伏设计方案中最重要的是什么?
  • 2、Linux_远程操作
  • 深入了解Java Duration类,对时间的精细操作
  • 龙迅#LT6911GX是一款高性能HDMI2.1至MIPI或LVDS芯片,支持图像处理,DSC压缩和嵌入式LPDDR4 旋转功能!
  • 【springboot原理篇】Bean的加载方式,面试必看
  • sprintf VS snprintf 函数
  • Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析
  • Linux halt命令教程:如何安全地关闭你的系统(附详细实例和注意事项)
  • 浅谈基于能耗评价指标的医院智能配电能效管理分析
  • 新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识
  • Leetcode 538 把二叉搜索树转换为累加树
  • 管理Android12系统的WLAN热点
  • OpenAI发布一周年,那些声称超过它的模型都怎么样了?
  • 如何知道B站各分区直播数据趋势?
  • MySQL进阶_EXPLAIN重点字段解析
  • 语音芯片的BUSY状态指示功能特征:提升用户体验与系统稳定性的关键
  • JAVA Spring boot Process finished with exit code 0
  • golang channel执行原理与代码分析
  • 基于Langchain的txt文本向量库搭建与检索
  • 菜鸟学习日记(python)——数据类型转换
  • 记一次ThreadPoolTaskExecutor的坑
  • 2023年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题
  • IRS辅助的隐蔽通信 (IRS aided covert communication)
  • csapp-linklab之第3阶段“输出学号”实验报告(强弱符号)
  • qt 安装
  • [C/C++]数据结构 堆排序(详细图解)
  • C++ 基础篇
  • 预约按摩小程序有哪些功能特点?
  • autojs-ui悬浮按钮模板