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.mzph.cn/news/197305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis——简单动态字符串(Simple Dynamic Strings,SDS)

简单动态字符串(Simple Dynamic Strings,SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据。SDS兼容C语言标准字符串处理函数,且在此基础上保证了二进制安全。 1、数据结构 在了解SDS源码前,我们先思考一个问…

【模电】设置静态工作点的必要性

设置静态工作点的必要性 静态工作点为什么要设置静态工作点 静态工作点 在放大电路中,当有信号输入时,交流量与直流量共存。将输入信号为零、即直流电源单独作用时晶体管的基极电流 I B I\tiny B IB、集电极电流 I C I\tiny C IC、b - e间电压 U B E U\t…

oops-framework框架 之 Excel转Json

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-plugin-excel-to-json 注: 作者dgflash的oops-framework框架QQ群: 628575875 配置 作者dgflash在oops-framework的框架中,提供了关于Excel数据表转换为Json和TypeSc…

对抗神经网络 CGAN实战详解 完整数据代码可直接运行

代码视频讲解: 中文核心项目:对抗神经网络 CGAN实战详解 完整代码数据可直接运行_哔哩哔哩_bilibili 运行图: 完整代码: from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply from keras.layers import BatchNormalization, Activation, Embedd…

uniapp是否可以用vant等移动端UI库、使用步骤以及需要注意的问题

文章目录 使用vant步骤使用中遇到的问题在浏览器中的运行效果综上,不建议uniapp项目使用vant。 使用vant步骤 首先vant可以兼容uniapp,直接用vant版就好。微信小程序专用版本是:vant-weapp。 基本使用步骤: 1、安装 # 安装 Va…

实战技巧:为Android应用设置独立的多语言

原文链接 实战技巧:为Android应用设置独立的多语言 通常情况下多语言的设置都在系统设置中,应用需要做的就是提供本应用所使用的字串的多语言翻译,使用时使用R.string.app_name类似的引用,然后系统会根据用户在系统设置中的选项来…

Java中实现单例模式的方式

1. 使用静态内部类实现单例模式 在Java中,使用静态内部类实现单例模式是一种常见而又有效的方式。这种方式被称为“静态内部类单例模式”或者“Holder模式”。这种实现方式有以下优点: 懒加载(Lazy Initialization):静…

python系统调用执行ping命令无法检测到超时情况(破案了:ping命令-W参数单位为s,我写了个1000)

文章目录 问题描述破案了:ping命令-W参数单位为s,我写了个1000。。。,,ԾㅂԾ,, 问题描述 我用了系统调用去执行ping,一开始用os.system(),有问题,后面用subprocess问题还是存在,后来我把这个改了&#xff…

“Python: Configure Tests“ not found解决方案

最近想尝试尝试学学软件测试。正好电脑上安装了vscode, 又懒得装pycharm,所以就用vscode了。 遇到的问题 跟着vscode运行unittest框架想运行一下测试用例文件。【前提是文件名一定要包含test,文件里要导入unittest的包,类要继承…

Django回顾5 - 多表操作、其它字段和字段参数、中间表的三种创建方式

【1】多表操作 基于对象跨表查(子查询) 执行两句sql语句,没有连表操作基于双下划线的连表查 一次查询,连表操作 【2】聚合查询(aggregate) 聚合函数 Min、Max、sum、Avg、Count aggregate是 QuerySet 的一个终止子句,用来做聚合查询 Book.…

deepin v20 在线安装docker

deepin v20 在线安装docker 删除docker,如果有的话: sudo apt-get -y remove docker docker-engine docker.io containerd runc让apt支持https sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-c…

竞赛选题YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快,YOLOv6还没用熟YOLOv7就来了,如果有同学的毕设项目想用上最新的技术,不妨看看学长的这篇文章,学长带大家简单的…

36.位运算符

一.什么是位运算符 按照二进制位来进行运算的运算符叫做位运算符,所以要先将操作数转换成二进制(补码)的形式在运算。C语言的中的位运算符有: 运算符作用举例结果& 按位与(and) 0&00; 0&10; …

Linux进程间通信——共享内存

Linux进程间通信——共享内存 1、创建/打开共享内存1.1 shmget1.2 ftok 2、关联和接触关联2.1 shmat2.2 shmdt 3、删除共享内存3.1 shmctl 3.2 相关shell命令3.3 共享内存状态4、进程间通信5、shm和mmap的区别 原文链接 共享内存不同于内存映射区,它不属于任何进程…

leetcode 117. 填充每个节点的下一个右侧节点指针 II

看了两三次的leetcode 117. 填充每个节点的下一个右侧节点指针 II 题目 给定一个二叉树: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#x…

基于现代学徒制的大数据技术与应用人才培养模式探讨

学生学徒制的实施旨在解决当前新技术企业招聘技能人才难和青年就业难的结构性矛盾,通过生态链链主企业携手院校共同解决毕业年度学生就业问题,按照学生个人意愿,建立以就业导向的学生学徒制关系,签订学徒培养协议确定学生就业岗位…

【Java基础】几种拼接字符串的方法

几种拼接字符串的方法 1.使用 "" 运算符拼接字符串2.使用 StringBuilder 或 StringBuffer 类3.使用 StringJoiner 类4.使用 String 类 join 方法5.使用 StringUtils 类6.使用 String 类 concat 方法7.使用 String.format() 方法格式化字符串8.使用 Stream 实现9.总结…

Python-图片去重

直接上代码 # 修改一下第34行文件夹路径以及13行图片后缀名即可使用 import os from hashlib import md5def remove_duplicate_images(folder_path):image_files []duplicate_images set()# 遍历文件夹,找到所有 JPG 图片文件for root, dirs, files in os.walk(f…

VUE项目中问题学习总结(一)

文章目录 🍁自定义组件使用🍁clearInterval函数的使用🌿定时器的作用 🍁localStorage的使用🌿设置数据🌿获取数据🌿更新数据🌿删除数据 🍁VUE国际化配置🍁项目…

智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黑猩猩算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑猩猩算法4.实验参数设定5.算法结果6.参考文献7.…