Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

CSDN: CodeZeng1998

其他平台:CodeZeng1998好锅

说明:Java 版本为 1.8

String、StringBuilder、StringBuffer的区别

  • 可变性

    • String:不可改变,一旦创建就无法修改。(扩展:字符串常量池~)

    • StringBuilder:可变的,内容可修改。

    • StringBuffer:可变的,内容可修改。

  • 线程安全性

    • String:不可变的,天生线程安全。

      // 底层是字符数组
      private final char value[];
      
    • StringBuilder:非线程安全。

    • StringBuffer:线程安全。(synchronized修饰)

          @Override
          public synchronized StringBuffer append(Object obj) {
              toStringCache = null;
              super.append(String.valueOf(obj));
              return this;
          }
      
  • 性能

    • String:由于不可变性,对于频繁修改来说效率较低。
    • StringBuilder:由于可变性,对于频繁修改来说效率较高。
    • StringBuffer:由于线程安全的开销,略低于StringBuilder。
  • 内存使用

    • String:可能导致内存浪费,因为修改会创建新对象。(每当执行任何看似修改字符串的操作,如连接(+ 操作符)、创建子字符串或替换时,都会在内存中创建一个新的字符串对象,其内容被修改。)

    • StringBuilder:内存使用更高效,因为可以直接修改内容而不创建新对象。

      // StringBuilder 可以在不创建新的 String 对象的情况下,直接修改其内部的字符数组,并实时更新内容。这种直接的字符数组操作使得在进行字符串追加时能够避免额外的内存分配和对象创建,从而提高了性能和内存使用效率。
          public AbstractStringBuilder append(String str) {
              if (str == null)
                  return appendNull();
              int len = str.length();
              // 数组扩容
              ensureCapacityInternal(count + len);
              // 追加字符串,底层是 native 修饰的System.arraycopy(...)方法实现数组拷贝
              str.getChars(0, len, value, count);
              count += len;
              return this;
          }
      
    • StringBuffer:与StringBuilder类似,但由于线程安全的原因略有开销。

  • 使用场景

    • String:适用于需要不可变性和线程安全性,并且修改较少的场景。
    • StringBuilder:适用于需要频繁修改而不需要线程安全的场景。
    • StringBuffer:适用于需要线程安全性的场景,即需要牺牲一些性能。

在这里插入图片描述

上图由 Pic 生成

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

CSDN: CodeZeng1998

其他平台:CodeZeng1998好锅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/662369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OLED显示一张图片

1.思路: void Oled_Show_Image(unsigned char *image) // { unsigned char i; //-128 ~ 127位 unsigned int j; //j要重新定义,因为要到达图片的最后一位 //行 i没有问题,j有问题 i为1时&am…

光速进化!易天万兆光模块全面升级

易天光通信宣布10G SFP/25G SFP28系列光模块产品进行了全新升级,旨在为客户提供更优质、更高效、更可靠的光通信解决方案。这次升级不仅是技术的突破,更是对未来光通信发展趋势的深刻洞察和精准把握。 一、技术革新,性能卓越 本次全系列产品…

强化学习——学习笔记3

一、强化学习都有哪些分类? 1、基于模型与不基于模型 根据是否具有环境模型,强化学习算法分为两种:基于模型与不基于模型 基于模型的强化学习(Model-based RL):可以简单的使用动态规划求解,任务可定义为预测和控制&am…

windows部署ollama+maxkb+vscode插件continue打造本地AI

windows部署ollamamaxkbvscode插件continue打造本地AI 前言下载ollamadocker desktopvscode插件continue 安装安装ollama设置环境变量 安装docker desktop部署maxkb容器 安装vscode插件模型搜索和推荐 前言 我采用docker运行maxkb,本地运行ollama形式。可能是windo…

HTTP报文

HTTP报文 报文流 HTTP报文是在HTTP引用程序之间发送的数据块,这些数据块以一种文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分,这些报文在客户端,服务器和代理之间流动。 报文流入源…

盘点韩语中的四字成语柯桥留学韩语学习外语培训

일석이조 一石二鸟 일거양득 一举两得 호장성세 虚张声势 새옹15857575376#지마 塞翁失马 간담상조 肝胆相照 이심전심 心心相印 동고동락 同甘共苦 외유내강 外柔内刚 입신양명 扬名立万 다다익선 多多益善 거두절미 截头去尾 일사천리 一泻千里 자유자재 自由自在 탁상공

一套saas模式云MES系统源码,基于springboot+vue.js+uniapp开发

一套saas模式云MES系统源码,基于springbootvue.jsuniapp开发 MES系统简介 MES系统,即制造执行系统(Manufacturing Execution System),是一种面向制造企业车间执行层的生产信息化管理系统。它位于上层的企业资源规划&a…

浅谈路由器转发数据包

当路由器转发数据包时,它会经历一系列步骤,包括接收数据包、路由表查询、以及转发数据包。以下是详细的步骤描述: 1. 接收数据包 以太网帧到达端口:当一个以太网帧到达路由器的某个网络接口(端口)时&#…

通过Transformers用不同的采样方法生成文本

近年来,随着以OpenAI的ChatGPT和Meta的LLaMA为代表的基于数百万网页数据训练的大型Transformer语言模型的兴起,开放域语言生成领域吸引了越来越多的关注。开放域中的条件语言生成效果令人印象深刻,典型的例子有:GPT2在独角兽话题上…

Javascript 基础知识 —— 重写数组方法

1、写一个函数,实现深度克隆对象 const obj {name: "LIYUFAN",age: 25,career: "初级前端工程师",info: {field: ["JS", "CSS", "HTML"],framework: ["React", "Vue", "Angular"…

什么是边缘计算网关?工业方向应用有哪些?天拓四方

在数字化时代,信息的传输与处理变得愈发重要,而其中的关键节点之一便是边缘计算网关。这一先进的网络设备,不仅扩展了云端功能至本地边缘设备,还使得边缘设备能够自主、快速地响应本地事件,提供了低延时、低成本、隐私…

2.开发环境介绍

开发环境介绍三种:第一种是在线开发环境、第二种是Windows下的开发环境、第三种是Linux下的开发环境。 1.在线开发环境 2.Windows下的开发环境 用的比较多的是Devc,新手适合使用,上手快,简单,方便。 Devc使用&#x…

利用cython将.py文件编译为.pyd文件

文章目录 1. 引言2. py文件编译为pyd文件步骤2.1 环境准备2.2 准备setup.py文件2.3 进行编译 3. 测试代码 1. 引言 在实际的Python开发中,为了防止Python脚本源码暴露,常常需要对python源码文件进行加密保护,Python的原始文件格式为.py&…

精选10款手机必备精品APP,每一款都不容错过!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ ​1.二维码而设计的应用程序——二维码设计 二维码设计 App 是一款专为用户创建和定制二维码而设计的应用程序。该应用适用于iOS和Android平台…

PLC自动化行业的发展前景好吗?

第一先说plc的薪资: 整体的平均薪资还是非常可观的,在1.3w/月左右。 当然PLC是需要经验积累的,尤其需要拥有大型的系统设计经验,那将会在PLC以至于自动化行业都会吃的开。所以待遇是与自身的经验,能力,所在…

(函数)颠倒字符串顺序(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <string.h>//声明颠倒函数; void reverse(char a[]) {//初始化变量值&#xff1b;int i, j;char t;//循环颠倒&#xff1b;for (i 0, j strl…

富凡行是什么软件,来具体聊一聊它的详情,感兴趣的不要错过了

目前做网络项目的人很多&#xff0c;也就衍生出了很多的软件、项目、平台。接触过了很多的产品&#xff0c;感触颇深&#xff0c;确实市面上的东西差别都很大&#xff0c;有好的&#xff0c;有不好的。 我也是喜欢在网上做点副业&#xff0c;自己捣鼓一下&#xff0c;毕竟互联网…

【2024.5.29数据库MYSQL史上最详细基础学习汇总】

初识数据库 什么是数据库: DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作; 什么是关系型数据库(SQL)? 关系型数据库是依据关系模型来创建的…

检索字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了很多应用于字符串查找的方法&#xff0c;这里主要介绍以下几种方法。 &#xff08;1&#xff09;count()方…

万亿国债消防救援——北斗应急通讯设备类目推荐

近期&#xff0c;云贵川地区山火肆虐&#xff0c;山火大范围、远距离、独立密集地发生&#xff0c;给消防救援带来了巨大挑战。 消防应急工作是保障人民生命财产安全的重要环节&#xff0c;它涉及到预防火灾、及时应对火灾事故以及灾后恢复等多个方面。在应对火灾、事故和其他…