String是Java中基础且重要的类并且String也是Immutable类的典型实现被声明为final class除了hash这个属性其它属性都声明为final,因为它的不可变性所以例如拼接字符串时候会产生很多无用的中间对象如果频繁的进行这样的操作对性能有所影响。StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类提供append和add方法可以将字符串添加到已有序列的末尾或指定位置它的本质是一个线程安全的可修改的字符序列把所有修改数据的方法都加上了synchronized。但是保证了线程安全是需要性能的代价的。在很多情况下我们的字符串拼接操作不需要线程安全这时候StringBuilder登场了StringBuilder是JDK1.5发布的它和StringBuffer本质上没什么区别就是去掉了保证线程安全的那部分减少了开销。StringBuffer 和 StringBuilder 二者都继承了 AbstractStringBuilder 底层都是利用可修改的char数组(JDK 9 以后是 byte数组)。所以如果我们有大量的字符串拼接如果能预知大小的话最好在new StringBuffer 或者StringBuilder 的时候设置好capacity避免多次扩容的开销。扩容要抛弃原有数组还要进行数组拷贝创建新的数组。我们平日开发通常情况下少量的字符串拼接其实没太必要担心例如String str “aa”“bb”“cc”;像这种没有变量的字符串编译阶段就直接合成aabbcc了然后看字符串常量池下面会说到常量池里有没有有也直接引用没有就在常量池中生成返回引用。如果是带变量的其实影响也不大JVM会帮我们优化了。(以下运行JDK版本为1.8)看看反编译结果String拼接用的是StringBuilder.append。是不是好像觉得那不平时不需要用StringBuilder 啊用String就好了啊都帮我们优化了不是的来看这个情况看看反编译结果new了很多次StringBuilder也就是说会如果有大量的字符串拼接new好多StringBuilder对象所以频繁的字符串操作还是得用StringBuilder再说说字符串常量池看看我们的代码你会发现String是真的频繁得使用到Java为了避免在一个系统中产生大量的String对象引入了字符串常量池。创建一个字符串时首先会检查池中是否有值相同的字符串对象如果有就直接返回引用不会创建字符串对象如果没有则新建字符串对象返回对象引用并且将新创建的对象放入池中。但是通过new方法创建的String对象是不检查字符串常量池的而是直接在堆中创建新对象也不会把对象放入池中。上述原则只适用于直接给String对象引用赋值的情况。String str1 new String(“a”); //不检查字符串常量池的String str2 “bb”; //检查字符串常量池的String还提供了intern()方法。调用该方法时如果字符串常量池中包括了一个等于此String对象的字符串由equals方法确定则返回池中的字符串的引用。否则将此String对象添加到池中并且返回此池中对象的引用。在JDK6中不推荐大量使用intern方法因为这个版本字符串缓存在永久代中这个空间是有限了除了FullGC之外不会被清楚所以大量的缓存在这容易OutOfMemoryError。之后的版本把字符串放入了堆中避免了永久代被挤满。总结1、在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明少量的字符串操作(拼接删除等)。2、在单线程情况下如有大量的字符串操作情况应该使用StringBuilder来操作字符串。不能使用String来拼接而是使用避免产生大量无用的中间对象耗费空间且执行效率低下新建对象、回收对象花费大量时间。如JSON的封装等。3、在多线程情况下如有大量的字符串操作情况应该使用StringBuffer。如HTTP参数解析和封装等。
Java面试技巧:八股文与场景题的平衡艺术 1. 互联网大厂Java技术面试现状剖析 2023年Java岗位面试呈现出明显的"八股文场景题"双轨制特征。根据笔者近期参与的数十场技术面试统计,大厂初级/中级岗位的面试中,基础知识考察占比约60%,系统设计占25%,算法题占15%。…
WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办? WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办? 时间:2018-01-06 来源:系统之家 作者:chunhua WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办?很多用户在操作Win1…
Vue3 迁移避坑大全:从 Vue2 到 Vue3 的 50 个隐蔽陷阱与解决方案 Vue3 迁移避坑大全:从 Vue2 到 Vue3 的 50 个隐蔽陷阱与解决方案 一、响应式系统:从 defineProperty 到 Proxy 的语义变更 Vue3 用 Proxy 取代了 Vue2 的 Object.defineProperty,这个底层变更带来了三组显著的迁移问题。 陷阱一:新…
轻量破局:搜极星如何用“普惠型GEO闭环”让中小品牌在AI搜索时代站稳脚跟 在流量红利见顶的当下,AI搜索正在重构用户获取信息的路径。据Gartner预测,到2026年,传统搜索引擎的流量将下滑25%,而基于大模型的AI对话式搜索占比将超过40%。对于中小品牌、成长型企业,以及希望低成本快速启动GEO&…
基于Apache Doris构建知识图谱增强RAG系统:从文档处理到智能问答 1. 先搞清楚这个方案到底解决了什么问题 如果你正在搭建一个基于大模型的问答系统,尤其是需要处理企业文档、技术手册这类内部知识,那你肯定遇到过两个核心痛点:一是传统的RAG(检索增强生成)方案,面对复杂…
逆向沃尔玛反爬虫:绕过PerimeterX人机验证与10秒等待机制 1. 项目概述:当爬虫遇上沃尔玛的“智能门卫” 做爬虫的朋友,尤其是搞电商数据采集的,这两年估计没少被沃尔玛折腾。以前那种简单的 requests 加 User-Agent 伪装就能畅通无阻的日子,早就一去不复返了。现在你打开沃尔玛的商品…
《坦克世界》独立模型与3D涂装:从安装到优化的完整指南 1. 先搞清楚独立模型和3D涂装到底解决什么问题如果你在《坦克世界》里见过那些细节拉满、质感独特的坦克外观,大概率就是独立模型和3D涂装的成果。这类内容不是简单换贴图,而是从模型结构、装甲细节到涂装分色全部重新设计。标题里的“艾布拉姆斯M1A2sep…
零基础一键重装系统:从风险认知到安全实操的完整指南 你有没有过这样的经历:电脑越用越慢,系统盘飘红,或者中了顽固的病毒,想重装系统却感觉无从下手?网上教程一大堆,又是制作启动盘,又是设置BIOS,还要找系统镜像、打驱动,每…
Prompt注入→数据反抽→模型窃取:AI应用层泄露三重跳杀链,4小时紧急修复方案已验证 更多请点击: https://codechina.net 第一章:AI 数据泄露预防 AI系统在训练与推理过程中频繁接触敏感数据,包括个人身份信息、医疗记录和商业机密,使得数据泄露风险显著高于传统软件系统。预防AI数据泄露需从数据生命周期的源头入…
告别臃肿!3步让你的暗影精灵笔记本重获新生 告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%! 做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽 2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集 Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…
智慧飞行 大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 从航线规划、自动飞行、AI识别到数据管理,一个平台全搞定 智慧飞行-大疆无人机一站式智能管控平台/支持大疆机场/私有化部署 企业级全域智能无人机一体化管控平台源码! 专为电力巡检、安防监控、应急救援、测绘勘察等行业打造,让您的无人机舰队实现 “无人化、自动化、智能化” 管理! 🎯 …
揭秘ChatGPT+Mathematica协同教学:为什么92%的初学者在72小时内建立函数直觉? 更多请点击: https://codechina.net 第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…