java字符串储存底层原理
字符串原理:原理1: 内存原理
(1)直接赋值给字符串,会把这个字符串放到常量池里,如果之后出现重复使用这个字符串的,就会直接从这个常量池中去引用,不会再去new一个字符串
(2)new出来的字符串不会重复使用,而是开辟一个新的空间存储原理2: 字符串中的"=="比较的是什么?因为字符串它是一个引用(指针)类型的数组,所以比较的是地址值原理3: 字符串拼接的原理
(1) String str = "a" + "b" + "c";
这样在拼接的时候没有变量,都是字符串,触发字符串的优化机制,在编译的时候就已经是"abc"了,就可以重复使用串池中的数据(2)String str1 = "a";String str2 ;String str3 ;str2 = str1 + "b";str3 = str2 + "c";
拼接有变量参与,就会再堆空间创建新的对象根据黑马程序员所讲,自己总结了一下,字符串的拼接分为两个版本:1. JDK8 以前: 在生成str2的时候,是先把str1放到堆空间中,然后创建一个StringBuilder对象去接收str1的内容,然后在堆空间中用append方法添加"b",最后把StringBuilder用toString()方法,生成了一个新的String对象,再让这个对象赋值给str2.总的来说:相当于生成了2个不必要的空间,用代码看:String str1 = "a";StringBuilder s = "a"; 这里生成了一个StringBuilder对象ss.append("b");String sc = s.toString(); 这里生成了一个新的String对象scstr2 = sc;这样就会占用两个不必要的空间,降低运行效率2. JDK8 之后:在生成str2的时候,先对str1 + "b"要占用的空间进行了预估,然后在堆空间占用了相应的数组空间,最后存入字符再组合成字符串但是这样也有个弊端,每次预估也是要有时间的,如果按这里例子来说,系统需要预估两次空间,所以效率还是提不上去.总结: 我们在用字符串拼接的时候尽量用StringBuilder对象手动添加,最后再返回String类型原理4: StringBuilder怎么提高效率的
由于这个类型的对象的内容是可以变动的,所以我们再添加的时候,变动的始终是这个对象,而不会去重新创建对象赋值
(String对象内容不可变动,是固定的)根据黑马程序员所讲,自己总结了下:
StringBuilder再空间中首先是以默认的字节数组存在的, 这个数组容量(最多能装下多少数据)默认为16,
但是他还有一个属性,叫length,length是记录实际上存储了多少数据如果我们在存入数据的时候长度超出了16,那么StringBuilder就会自动扩容(有点类似队列自动扩容),
扩容范围是原数组的容量*2 + 2.如果我们一下子存入了很多很多数据,比如40(超出了扩容范围),那么StringBuilder就会以我们存入的数据长度为标准,
重新创建空间,空间的大小就是我们存入数据的长度(40).相关文章:
java字符串储存底层原理
字符串原理:原理1: 内存原理 (1)直接赋值给字符串,会把这个字符串放到常量池里,如果之后出现重复使用这个字符串的,就会直接从这个常量池中去引用,不会再去new一个字符串 (2)new出来的字符串不会重复使用,而是开辟一个新的空间存储原理2: 字符串中的""比较的是什么?…...
c++获取当前时间的字符串
代码 void getNowTimePrefix(std::string& prefix) {std::time_t nowTime;struct tm* p new tm;std::time(&nowTime);localtime_s(p, &nowTime);int year p->tm_year 1900;int month p->tm_mon 1;int day p->tm_mday;int hour p->tm_hour;int …...
【精品】通用Mapper 批量更新bug解决方案
问题描述 环境:mysql8.xmybatis3.5.13tk.mybatis4.2.3 在使用tk.mybatis做批量更新时,程序会报错,说是执行的SQL语法错误,经研究源代码发现tk.mybatis在实现批量更新时是通过多次执行update语句实现的。这本身就不符合MySQL批量…...
腾讯mini项目-【指标监控服务重构-会议记录】2023-07-06
7/6 会议记录 Profile4个步骤 解压kafka消息初始化性能事件,分析事件将数据写入kafkaRun 开始执行各stage handler 上报耗时到otel-collector。。。 // ConsumerDispatchHandler consumer // // param msg *sarama.ConsumerMessage // param consumer *databus.K…...
【React】函数式组件和类式组件的用法和逻辑
组件的使用 当应用是以多组件的方式实现,这个应用就是一个组件化的应用 注意: 组件名必须是首字母大写虚拟DOM元素只能有一个根元素虚拟DOM元素必须有结束标签 < /> 渲染类组件标签的基本流程React 内部会创建组件实例对象调用render()得到虚拟 …...
题目 1061: 二级C语言-计负均正
从键盘输入任意20个整型数,统计其中的负数个数并求所有正数的平均值。 保留两位小数 样例输入 1 2 3 4 5 6 7 8 9 10 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 样例输出 10 5.50 解题思路: 如题所示,输入20个正负数,---》求付数的个…...
数位和(C++)
系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…...
[牛客复盘] 牛客周赛round13 20230924
[牛客复盘] 牛客周赛round13 20230924 总结矩阵转置置2. 思路分析3. 代码实现 小红买基金1. 题目描述2. 思路分析3. 代码实现 小红的密码修改1. 题目描述2. 思路分析3. 代码实现 小红的转账设置方式1. 题目描述2. 思路分析3. 代码实现 小红打boss1. 题目描述2. 思路分析3. 代码…...
mybatsi-MyBatis的逆向工程
mybatsi-MyBatis的逆向工程 一、前言二、创建逆向工程的步骤1.添加依赖和插件2.创建MyBatis的核心配置文件3.创建逆向工程的配置文件4.执行MBG插件的generate目标 一、前言 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。 Hibernate是支…...
转转闲鱼交易猫链接源码 支持二维码收款
最新仿二手闲置链接源码 后台一键生成链接,后台管理教程:解压源码,修改数据库config/Congig 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3...
Python爬虫基础(三):使用Selenium动态加载网页
文章目录 系列文章索引一、Selenium简介1、什么是selenium?2、为什么使用selenium3、安装selenium(1)谷歌浏览器驱动下载安装(2)安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…...
Linux系统下安装Mysql
1、执行命令:rpm -qa | grep -i mysql,先查看系统之前是否有安装相关的rpm包,如果有,会显示类似下面的信息; 2、通过命令yum -y remove mysql-* 一次性删除系统上所有相关的rpm包,或者通过命令yum -y …...
Jenkins学习笔记1
CI 服务器: 认识Jenkins: Jenkins是一个可扩展的持续集成(CI)引擎,是一个开源项目,旨在提供一个开放易用的软件平台,使得软件持续集成变成可能。Jenkins非常易于安装和配置,简单易…...
注意力机制
概念没什么好说的,反正大家都会说,具体实战怎么写才是最为重要的 1.自注意力 假设有一组数据,都是一维的向量,这个向量可能是一个样本,可能是其他什么,都无所谓。 假设有一组一维向量x1,x2,x3,x4,x5; 第…...
JVM-Java字节码技术笔记
Java字节码技术 Java字节码是java代码编译后的中间代码格式,JVM需要读取并解析字节码才能执行相应的任务 获取字节码简介:由单字节(byte)的指令组成 操作码( 指令), 主要由类型前缀和操作名称两部分组成。根据指令的性质…...
C++ 友元、重载、继承、多态
友元 关键字:friend 友元的三种实现 全局函数做友元类做友元成员函数做友元 全局函数做友元 //建筑物类 class Building {//goodGay全局函数是Building好朋友,可以访问Building中私有成员friend void goodGay(Building& building); public:Build…...
Spring Boot 日志文件
前言 本篇博客主要介绍自定义的日志打印、日志的级别高低、如何保存日志等等..... 一、日志是什么?日志有什么用? 日志就是我们控制台上输出的内容,控制台上的输出的信息就是日志信息,如下所示: 日志有什么用&#x…...
vulhub venom
文章目录 靶场环境信息收集ftp服务二、信息利用三、任意文件上传三 sudo提权靶场环境 `vmware 靶场信息:https://www.vulnhub.com/entry/venom-1,701/ 下载地址:https://download.vulnhub.com/venom/venom.zip 新建虚拟机打开下载后的ovf文件 遇见导入失败合规性检查时,重试…...
量化交易之One Piece篇 - linux - 定时任务(重启服务器、执行程序、验证)
linux 执行命令: crontab -e 0 5 * * 1-5 sudo /sbin/shutdown -r now 0 17 * * 1-5 sudo /sbin/shutdown -r now 45 8 * * 1-5 cd /home/ubuntu/onepiece/bin/datacore && ./datacore 45 20 * * 1-5 cd /home/ubuntu/onepiece/bin/datacore && ./datacore 以…...
Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例
Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例 第23章 多功能文档查看器实例23.1. 简介23.2. 界面与程序框架设计23.2.1. 图片资源23.2.2. 网页资源23.2.3. 测试用文件 23.3 主程序代码框架23.4 浏览网页功能实现23.4.1 实现HtmIHandler处理器 23.5. 部分代码实现23.5…...
为什么说res-downloader能3步搞定全网资源下载?从新手到高手的实战指南
为什么说res-downloader能3步搞定全网资源下载?从新手到高手的实战指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader…...
终极Mac风扇控制指南:3步掌握smcFanControl让Intel Mac运行更凉爽
终极Mac风扇控制指南:3步掌握smcFanControl让Intel Mac运行更凉爽 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 当你的Intel Mac在高负载下工作…...
Hotkey Detective终极指南:3步快速解决Windows热键冲突问题
Hotkey Detective终极指南:3步快速解决Windows热键冲突问题 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...
HY-SRF05超声波模块的5个常见误区及优化技巧(附STM32代码)
HY-SRF05超声波模块的5个常见误区及优化技巧(附STM32代码) 在嵌入式开发中,HY-SRF05超声波模块因其成本低廉、使用简单而广受欢迎。但很多开发者在使用过程中常会遇到测量不稳定、精度不足等问题。本文将深入剖析五个最常见的误区,…...
translategemma-12b-it在C++高性能计算环境中的集成
translategemma-12b-it在C高性能计算环境中的集成 1. 引言 在当今全球化的技术环境中,多语言翻译能力已经成为许多应用程序的核心需求。translategemma-12b-it作为Google基于Gemma 3架构开发的专门翻译模型,支持55种语言的高质量互译,为开发…...
DeepSeek-R1-Distill-Qwen-1.5B效果展示:同一问题下思考链vs直答效果对比
DeepSeek-R1-Distill-Qwen-1.5B效果展示:同一问题下思考链vs直答效果对比 1. 项目概述 DeepSeek-R1-Distill-Qwen-1.5B是一个超轻量级的智能对话模型,基于魔塔平台下载量最高的蒸馏模型构建。这个模型巧妙融合了DeepSeek强大的逻辑推理能力和Qwen成熟的…...
7天掌握LAV Filters:构建终极DirectShow媒体解码方案完全指南
7天掌握LAV Filters:构建终极DirectShow媒体解码方案完全指南 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于FFmpeg的开源…...
Swagger Client 完整教程:从零开始构建强大的 API 集成应用
Swagger Client 完整教程:从零开始构建强大的 API 集成应用 【免费下载链接】swagger-js Javascript library to connect to swagger-enabled APIs via browser or nodejs 项目地址: https://gitcode.com/gh_mirrors/sw/swagger-js Swagger Client 是一款功能…...
社区补丁系统深度解析:如何为 Emacs 添加高级功能
社区补丁系统深度解析:如何为 Emacs 添加高级功能 【免费下载链接】homebrew-emacs-plus Emacs Plus formulae for the Homebrew package manager 项目地址: https://gitcode.com/gh_mirrors/ho/homebrew-emacs-plus Homebrew-emacs-plus 是一个专为 Homebre…...
Spoon与Gradle插件集成:现代化Android项目的最佳实践指南 [特殊字符]
Spoon与Gradle插件集成:现代化Android项目的最佳实践指南 🚀 【免费下载链接】spoon Distributing instrumentation tests to all your Androids. 项目地址: https://gitcode.com/gh_mirrors/sp/spoon Spoon是一个强大的Android测试分发工具&…...
