面试题:String,StringBuilder和StringBuffer的区别

news2024/11/25 6:43:47

面试题:String,StringBuilder和StringBuffer的区别

一、String

1、String是一个长度不可变的字符序列,底层是一个被final修饰的char[]数组。
在这里插入图片描述

2、任何对String类型进行改变的操作实际上都是重新生产一个新的String对象,然后将指针指向新的String对象。
举例说明,上代码:
在这里插入图片描述

3、对于上段代码我们来分析一下子,首先创建了String对象x,同时开辟一空间存储字符串序列”hello”,然后将对象x指向字符串序列”hello”的存储地址。然后需要再开辟另一空间存储字符串序列”java”,再将两个字符串进行拼接并存储到另一个新开辟的存储空间中,最后将对象x的地址指向拼接后的字符串对应的存储空间的地址,整个过程完成。
4、我们不难发现,这样一个简单的对String对象进行修改的操作需要开辟三次空间变更两次地址,这样不仅效率低,而且大量浪费有限的内存空间。因此,如果你需要频繁的对字符串进行操作的话,看样子String对象这时候就不太中用了。
5、基于上述的使用背景,即如果你需要频繁的对字符串进行操作的话,就需要使用到StringBuilder和StringBuffer了。

二、StringBuilder、StringBuffer

StringBuilder:可变的字符序列 , 线程不安全的,效率高,底层是 char[]数组 存储。
StringBuffer:可变的字符序列 , 线程安全的,效率低,底层是 char[]数组 存储。

StringBuilder和StringBuffer都是可变的字符串序列,可以对其进行多次修改而不创建新的对象。两者的区别在于线程安全性,StringBuffer是线程安全的,而StringBuilder是非线程安全的。在多线程环境下使用StringBuffer可以保证线程安全,但是会降低性能。在单线程环境下使用StringBuilder性能更高。

三、StringBuilder、StringBuffer对象创建及常用方法

1、对象创建
两个类创建的话,直接new对象即可,如果需要想创建指定字符串的对象,那么带参即可。示例如下:
在这里插入图片描述
在这里插入图片描述

2、常用方法
在这里插入图片描述

四、小结
String:不可变长的字符串序列,适用于少量的字符串操作的情况。
StringBuilder:适用于在单线程环境下进行大量的字符串操作,可以获得更好的性能。
StringBuffer:适用于在多线程环境下进行大量的字符串操作,可以保证线程安全,但是会牺牲一定的性能。

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

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

相关文章

micro-app在vue-element-admin中一些使用研究

1、简述 本文承接上一篇micro-app在vue-element-admi中的搭建,对micro-app在vue-element-admin中的一些平时开发中常用的功能做了一些研究。本文代码 2、路由 关于路由,这边从两方面进行研究,一方面是对菜单的配置,另一方面是页…

❤ 个人博客的搭建和设置

❤ 个人博客的搭建和设置 闲暇时候自己试着做了一个自己的个人博客,博客使用的Github进行托管,还在阿里云买了属于自己的域名 具体步骤如下 1、登陆自己的博客账号,新建个人主页的仓库 2、到了我们的名字设置,格外注意&#xf…

Leetcode刷题之两两交换链表中的结点和相交链表

只有把抱怨环境的心情,化为上进的力量,才是成功的保证。 ——罗曼罗兰目录 🍉一.相交链表 💐1.双指针 🍍2.计算长度加双指针 🍒二.两两交换链表中的结点 🍌1.迭代 🍉一…

【Golang】多线程下载器的实现

〇、前言 多线程下载,顾名思义就是对一个文件进行切片访问,等待所有的文件下载完成后在本地进行拼接成一个整体文件的过程。 因此可以利用 golang 的多协程对每个分片同步下载,之后再合并且进行md5校验或者总长度校验。 一、请求资源 下载…

5.7学习周报

文章目录 前言文献阅读摘要简介数据方法论预测结果结论 时间序列预测总结 前言 本周阅读文献《Water quality forecasting based on data decomposition, fuzzy clustering and deep learning neural network》,文献主要结合数据分解、模糊C均值聚类和双向门控循环…

设计模式 - 工厂方法模式

设计模式 - 工厂方法模式 1、关于工厂方法模式2、工厂方法模式小试牛刀2.1、类图2.2、代码清单3、工厂方法模式的扩展3.1、简单工厂模式(静态工厂模式) 1、关于工厂方法模式 工厂方法模式,就是定义一个用于创建对象的接口,让子类决…

Ubuntu20升级nodejs版本

执行 grunt build的时候提示node版本过低 当前版本为10.19.0,不满足要求 安装 n,用于更新 node 版本的 sudo npm install n -g用n 下载 nodejs 的最新稳定版本 sudo n stable3. 安装完毕,node -r检查当前版本

【算法与数据结构】链表

链表 链表:结构定义 链表是由一串节点串联在一起的,链表的每个节点存储两个信息:数据下一个节点的地址 分清楚两个概念:什么是内存内部,什么是程序内部 内存内部: 信息存储在内存空间里的 程序内部&#…

复习笔记1

考纲(张友生版本软件架构 考试题型: 10*3单选 5*3简答题 5*3设计图(含画图) 10*2 论述题 10*2综合题 复习以课件为主,书为辅 第一章 (软件危机) ? ? 构造模型与实现 掌握软件结构体系核心模型 第二章 软件体…

阿里云Alibaba Cloud Linux镜像系统介绍及常见问题解答FAQ

阿里云服务器操作系统Alibaba Cloud Linux镜像怎么样?可以代替CentOS吗?Alibaba Cloud Linux兼容性如何?有人维护吗?漏洞可以修复吗?Alibaba Cloud Linux完全兼容CentOS,并由阿里云官方免费提供长期维护。 …

Java并发,夺命 60 问

基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位。 并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。 并发就是同一时刻,只有一个执行,但是一个时间段内&am…

linux系统中rpm与Yum软件仓库

rpm的作用: 在没有rpm软件管理之前我们在安装、升级、卸载服务程序时要考虑到其他程序、库的依赖关系,所以在进行安装、校验、卸载、升级等操作时的难度就非常之大。 rpm机制则为就是为了解决这些问题而设计的,rpm有点像windows系统中的控制…

xawtv涉及的vivid系统调用分析

xawtv涉及的vivid系统调用分析 文章目录 xawtv涉及的vivid系统调用分析调用过程分析摄像头驱动程序必需的11个ioctl非必须必须 分析数据的获取过程1.请求分配缓冲区: ioctl(4, VIDIOC_REQBUFS // 请求系统分配缓冲区2.查询映射缓冲区:3.把缓冲区放入队列:4.启动摄像头5.用selec…

Docker-Flannel网络讲解

目录 什么是Flannel Flannel原理 部署 环境准备 安装etcd 安装fannel 在server2上装flannel 测试 什么是Flannel flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberent…

文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题

四、函数 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! ⌈lgn⌉! 多项式有界吗?函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! ⌈lglgn⌉! 多项式有界吗? 文心一言: chatgpt: 对于第一个问题,函数 ⌈ lg ⁡ n…

C++类和对象(6)

类和对象 1.在谈构造函数1.1. 构造函数体赋值1.2. 初始化列表1.3. explicit关键字 2. static成员2.1. 概念2.2. 特性 3.友元函数3.2.友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化7.再次理解类和对象 1.在谈构造函数 1.1. 构造函数体赋值 在创建对象时&#xff0c…

【SPSS】回归分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

数据结构入门-顺序表链表

线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种实际中广泛使用多个数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。…

前后端图片交互的简易方式

前后端图片交互的简易方式 一、交互方式说明二、前后端具体代码实现前端具体代码实现后端具体代码实现效果 测试结果 一、交互方式说明 在项目的实际开发中,难免会遇到前端需要渲染数据库中保存的图片,那咱知道图片也属于一种文件,不好保存到…

maven依赖jar包时版本冲突的解决

1、第一声明优先原则 在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。 所以,先声明自己要用的版本的jar包即可。 所以,添加新依赖时要放在最后边,以防止新依赖替换原有依赖造成版本冲…