面试官:String、StringBuffer、StringBuilder有什么区别?

news2024/11/27 2:18:34

回答思路:

        阐述String概念理解

        存在问题和设计考量

        总结体现的两个特性

        StringBuilder/StringBuffer相同点和不同点

        三者使用场景总结

回答总结:

       String是Java中非常常见且基础的类,用于字符串的构造和管理,它是Immutable类的经典实现,是final class,所有的属性也都是final的所以无法对内部数据进行修改,原生的保证了线程安全;JDK8及其以前,底层数据是用char数组进行存储的,JDK9之后是byte数组存储的;

        String修改操作不当会产生大量的临时字符串,为了避免这样的问题,Java引入了字符串常量(位于JVM的方法区内部有一个运行时常量池,字符串经过.intern()方法放入常量池)。运行机制就是:创建字符串常量 -> 检查常量池是否存在相同的字符串对象 -> 如果有则直接引用 -> 如果没有才创建新的字符串并保存在常量池中(注:放入常量池是指直接赋值法,new的字符串不放入常量池);

        上述体现String两个特性:

                1.不可变,String对象一旦生成不能对它进行改变;

                2.常量池,当两个String有相同值的时候常量池的设计大幅度节省内存空间;

        StringBuilder/StringBuffer是因为String修改操作的局限性而产生的工具类,都实现了AbstractStringBuilder类(将字符串的剪裁、拼接等常用动作封装成方法定义),所以几乎拥有了一致的对外方法调用。虽然他们底层存储的数据结构与String相同,但不同的是他们可以改变对象的值(这里改变的原理和ArrayList扩容一致,所以合理预估大小可以提升性能),并且值改变了以后不影响对象引用;

        StringBuilder/StringBuffer的区别在于StringBuffer是线程安全的,它保证线程安全的方式是粗暴的给每个方法实现都加上了synchronize关键字,因此StringBuffer的性能要低于StringBuffer;

        综上分析,在使用场景上:

        1. 字符串内容不常变化时用String类;

        2.频繁执行字符串修改操作,且单线程场景时,更适合用StringBuilder;

        3.频繁执行字符串操作,且多线程场景时,更适合用StringBuffer。

     

注:上文提到的常量池位置

 

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

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

相关文章

SpringCloud之断路器聚合监控

一、Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单,只需要…

APP 怎么免费接入 MobPush

1、获取 AppKey 申请 Appkey 的流程,请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid70819 2、下载 SDK 下载解压后,如下图: 目录结构 (1)Sample:演示Demo。(2)SDK&am…

干货 | 什么是磁传感器?最常用的磁传感器类型及应用

1、什么是磁传感器?磁传感器通常是指将磁场的大小和变化转换成电信号。磁场,以地球磁场(地磁)或磁石为例的磁场是我们熟悉但不可见的现象。将不可见的磁场转化为电信号,以及转化为可见效应的磁传感器一直以来都是研究的主题。从几十年前使用电…

2/9考试总结

时间安排 7:30–7:50 读题,T1貌似需要建图,T2 dp ,T3 神秘博弈。 7:50–8:40 T1,首先可以建图,然后可以发现许多优秀性质,发现题目要求实际上是在每棵树上选一条价值最大的链。问题在于如何取最大&#xf…

MySQL事务管理

文章目录MySQL事务管理事务的概念事务的版本支持事务的提交方式事务的相关演示事务的隔离级别查看与设置隔离级别读未提交(Read Uncommitted)读提交(Read Committed)可重复读(Repeatable Read)串行化&#…

2023开工开学火热!远行的人们,把淘特箱包送上顶流

春暖花开,被疫情偷走的三年在今年开学季找补回来了。多个数据反馈,居民消费意愿大幅提升。在淘特上,开工开学节点就很是明显:1月30日以来,淘特箱包品类甚至远超2022年双11,成为开年“第一爆品”。与此同时&…

第四章第七节:CNN练习1使用四种网络结构(VGG、ResNet、MobileNet、InceptionNet)进行cifar10训练

文章目录一:cifar10数据集介绍二:代码(1)数据加载脚本编写(2)模型搭建①:VGG②:ResNet③:MobileNetV1④:InceptionNet(3)训练脚本一&a…

存储式示波器如何保存图片?

示波器是检测电子线路最有效的工具之一,通过观察电子电路中一些关键节点如某些引脚,MOS管的输出波形,可以直观的检查电路工作是否正常,验证电子电路设计是否恰当。在平时使用示波器的过程中,经常会用示波器去卡某一个信…

canvas 制作2048

效果展示 对UI不满意可以自行调整,这里只是说一下游戏的逻辑,具体的API调用不做过多展示。 玩法分析 2048 的玩法非常简单,通过键盘的按下,所有的数字都向着同一个方向移动,如果出现两个相同的数字,就将…

docker安装elashticsearch

福利:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取! 从docker下载elashticsearch镜像(可以指定版本号) docker pull elasticsearch:7.4.22. 从dock…

网络安全实验室3.脚本关

3.脚本关 1.key又又找不到了 url:http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/index.php 点击链接,burp抓包,发送到重放模块,点击go 得到key is : yougotit_script_now 2.快速口算 url:http:…

树莓派开机自启动Python脚本或者应用程序

树莓派开机自启动Python脚本或者应用程序前言一、对于Python脚本的自启动方法1、打开etc/rc.local文件2、编辑输入需要启动的指令3、重启树莓派验证二、对于需要读写配置文件的应用程序的自启前言 在树莓派上写了一些Python脚本,还有一个java 的jar包想要在树莓派上…

2023年,什么样的CRM,才是您最需要的?

春节假期刚刚结束,当大家还沉浸在新春佳节的喜悦中时,很多地方已经争先恐后地奋力开跑了。近日,全国各地方政府相继出台并发布了2023年数字化转型规划,纷纷结合自身的区位特色和优势资源,明确2023年乃至此后数年的数字…

动态规划详解(完结篇)——如何抽象出动态规划算法?以及解题思路

今天直接开始讲解FIRST:如何抽象出动态规划算法?这个问题,困扰了无数代OIER,包括本蒟蒻在比赛的时候,看一道题,怎么想到他是什么算法的呢?这就需要抽象能力而不同的算法,往往有着不同…

The last packet sent successfully to the server was 0 milliseconds ago. 解决办法

mybatis-generator-maven-plugin插件The last packet sent successfully to the server was 0 milliseconds agoYou must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to…

Spark SQL 介绍

文章目录Spark SQL1、Hive on SparkSQL2、SparkSQL 优点3、SparkSQL 特点1) 容易整合2) 统一的数据访问3) 兼容 Hive4) 标准的数据连接4、DataFrame 是什么5、DataSet 是什么Spark SQL Spark SQL 是 Spark 用于结构化数据(structured data) 处理的Spark模块。 1、Hive on Spa…

维基百科数据抽取

1. 数据路径 https://dumps.wikimedia.org/enwiki/latest/ ----英文 https://dumps.wikimedia.org/zhwiki/latest/ ----中文 https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2 --下载最新的 https://dumps.wikimedia.org/wikidatawiki/2023…

公司招了个腾讯P7:闲聊后被我套出拿下35Koffer的面试技巧

早上一进公司就见人事热热闹闹的带人办入职手续,早之前听说公司将来一个腾讯离职的同事,薪资已达中上水平,大家都很好奇到底是怎样的人才,果不其然,让我们见识到什么是测试天花板 在新人见面会上,自动化、测…

web开发

目录 使用Idea搭建Web项目 使用Idea开发Web项目基本知识 tomcat配置信息 HTML /CSS 开发主页 Servlet 学习和掌握的内容: HTML/CSSServlet MVC模式和Web开发数据库基本应用和JDBC应用软件项目开发流程 环境及工具版本: Windows10,JDK1.8 Idea2…

【C++】基于范围的for循环 (C++11)

基于范围的for循环 C11 一、范围for的基本语法二、范围for中使用引用 &#xff08;一些奇葩的问题&#xff09;讨论三、范围for的使用条件一、范围for的基本语法 在C98中如果要遍历一个数组&#xff0c;可以按照以下方式进行&#xff1a; #include<iostream> using nam…