解读StringBuffer、StringBuilder、String区别

雷电模拟器+Auto.js避坑指南:用桥接模式解决PC与模拟器连接超时问题 本文详细解析了雷电模拟器与Auto.js联调中的桥接模式应用,解决PC与模拟器连接超时问题。通过桥接模式配置、高频故障排查及多开环境下的高阶配置,提升开发效率与稳定性,特别适合需要稳定网络连接的Auto.js开发者。 阅读详情

源码级StringBuffer和StringBuilder以及String区别

作为一个面试常问的问题:
首先看一下源码:

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

这是源码从这里可以看出两者都可序列化,CharSequence是一个字符序列,从这里我们
看不出来区别

看下面的代码可以看出:
1、StringBuffe方法前都加了synchronized所以第一个区别就是StringBuffer是线程安全的,适合多线程环境。

StringBuffer源码

@Override
    public synchronized int length() {
        return count;
    }

    @Override
    public synchronized int capacity() {
        return value.length;
    }


    @Override
    public synchronized void ensureCapacity(int minimumCapacity) {
        super.ensureCapacity(minimumCapacity);
    }

    /**
     * @since      1.5
     */
    @Override
    public synchronized void trimToSize() {
        super.trimToSize();
    }

    /**
     * @throws IndexOutOfBoundsException {@inheritDoc}
     * @see        #length()
     */
    @Override
    public synchronized void setLength(int newLength) {
        toStringCache = null;
        super.setLength(newLength);
    }

    /**
     * @throws IndexOutOfBoundsException {@inheritDoc}
     * @see        #length()
     */
    @Override
    public synchronized char charAt(int index) {
        if ((index < 0) || (index >= count))
            throw new StringIndexOutOfBoundsException(index);
        return value[index];
    }

StringBuilder的源码

 @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }

    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

    /**
     * Appends the specified {@code StringBuffer} to this sequence.
     * <p>
     * The characters of the {@code StringBuffer} argument are appended,
     * in order, to this sequence, increasing the
     * length of this sequence by the length of the argument.
     * If {@code sb} is {@code null}, then the four characters
     * {@code "null"} are appended to this sequence.
     * <p>
     * Let <i>n</i> be the length of this character sequence just prior to
     * execution of the {@code append} method. Then the character at index
     * <i>k</i> in the new character sequence is equal to the character at
     * index <i>k</i> in the old character sequence, if <i>k</i> is less than
     * <i>n</i>; otherwise, it is equal to the character at index <i>k-n</i>
     * in the argument {@code sb}.
     *
     * @param   sb   the {@code StringBuffer} to append.
     * @return  a reference to this object.
     */
    public StringBuilder append(StringBuffer sb) {
        super.append(sb);
        return this;
    }

    @Override
    public StringBuilder append(CharSequence s) {
        super.append(s);
        return this;
    }

    /**
     * @throws     IndexOutOfBoundsException {@inheritDoc}
     */
    @Override
    public StringBuilder append(CharSequence s, int start, int end) {
        super.append(s, start, end);
        return this;
    }

2、
StringBuilder的包:

package java.lang;

StringBuffer的包:

package java.lang;
import java.util.Arrays;

从这句话可以看出:两个类都是属于lang下的,但是StringBuffer中导入了Arrays的

StringBuffer中多出有一个这样的属性

/**
     * A cache of the last value returned by toString. Cleared
     * whenever the StringBuffer is modified.
     */
    private transient char[] toStringCache;

解释一下这个代码的意思:
注释的意思是:toString返回的最后一个值的缓冲,当StringBuffer被修改时清除

transient修饰的变量值不参与序列化。

这个不重要,既然看到这儿了,我们在看一下String的特殊之处:

来,上源码:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

精华全在上边了:
1、首先多实现了Comparable接口,没有实现AbstractStringBuilder
2、低层value数组不可变,那我们看一下StringBuffer和StringBuilder

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;

这是另一个区别是String是不可变的。

【Clickhouse】Clickhouse写入报错keeper server rejected the connection during the handshake 我的clickhouse集群时不时的报这个错误All connection tries failed while connecting to ZooKeeper. nodes: xxx 到时写入数据失败 用的ck自带的keeper。你需要仔细检查ZooKeeper集群的配置和状态,确保所有节点都正常运行,并且能够正确地选举领导者。检查ZooKeeper的ACL以及ClickHouse连接所使用的凭据,确保它们被正确配置和授权。版本不兼容:有时,不同版本的软件之间可能存在不兼容性,导致连接问题。 阅读详情

相关推荐

【随机过程】Markov Chain的定义及发展历程与实际应用

本模块书写的初衷:由于在学习张波张景肖等学者所著的《应用随机过程》存在着不甚了解的知识点,经过个人查找资料并整理、分享,希望能够为有同样疑惑的读者贡献绵薄之力,同时如果个人编写内容有错误,恳请读者指正。本文为对《应用随机过程》第42页中Markov Chain基本概念的补充。1.Markov Chain的定义俄国数学家 Andrey Andreyevich Markov 研究并提出一个用数学方法就能解释自然变化的一般规律模型,被命名为马尔科夫链(Markov Chain)。

qq_49657150的博客 3743

解读 String、StringBuilder、StringBuffer:从区别到场景应用

原因: 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。原因:String中的对象是不可变的可以理解为常量,所以线程安全。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。以上内容出自本人整理的面试秘籍。

周哥的offer秘籍 195

【CUT&TAG分析-加了spike in的样品】

使用 Bowtie2 或 Subread (subjunc) 来构建大肠杆菌的索引。bowtie2比对时设置参数–local, 局部比对。

weixin_57975238的博客 1397

Java问题解读系列之String相关---String、StringBuffer、StringBuilder的区别

今天的题目是String、StringBuffer和StringBuilder的区别: 首先还是去官方的API看看对这三种类型的介绍吧,Go...... 一、继承类和实现接口情况 1、String类 public final class String extends Object implements Serializable, Comparable<String>, ...

weixin_30752699的博客 90

OpenEuler22.03 LTS下Zabbix7.0监控系统的容器化部署避坑指南(含Docker-Compose完整配置)

本文详细介绍了在OpenEuler22.03 LTS操作系统上容器化部署Zabbix7.0监控系统的完整流程,包括Docker引擎配置、Docker-Compose编排、网络模式选择及性能调优等关键步骤。针对OpenEuler环境下的特殊问题提供了解决方案,帮助用户高效搭建稳定可靠的监控系统。

python9snake的博客 267

别再死磕DH参数了!用MATLAB Robotics Toolbox + SOLIDWORKS搞定六轴机械臂仿真(附避坑指南)

本文详细介绍了如何利用MATLAB Robotics Toolbox和SOLIDWORKS进行六轴机械臂仿真,避免常见的DH参数错误和模型导出问题。通过实战指南和避坑技巧,帮助工程师实现从三维建模到运动学仿真的无缝衔接,提升仿真效率和准确性。

weixin_27066963的博客 394

(二)String,StringBuffer和StringBuilder的区别

这是一个非常初级也是一个老生常谈的问题了,最近准备面试,温习了一遍,索性写下来我自己的理解吧,我学习一般喜欢去源码看一下,我们先来概括一下他们的区别,然后分头看一下就可以了。 1.概念 String 字符串常量 StringBuffer 线程安全的字符串变量 StringBuilder 非线程安全的字符串变量 2.StringBuffer和StringBuilder相对于String...

qq_27633345的博客 338

置顶必读(1) |《滚雪球学SpringBoot 3.x》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot 3.x》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 12万+

jdk源码解读-String、StringBuilder、StringBuffer

文章目录前言1.StringBuilder和StringBuffer为啥可变,String为啥不可变2. 为什么说StringBuilder线程不安全,String和StringBuffer线程安全补充StringBuilder和StringBuffer初始大小和扩容 前言 上一篇分析了AbstractStringBuilder抽象类,在面试中常常会问到String和StringBuilder、S...

jerryq的博客 367

SecOC专题之新鲜值TripCnt

本系列为一步步拆解新鲜值的分发及管理而撰写文章属于原创,根据自身开发经验及理解撰写,若有错误请指出Trip Counter是新鲜值中变化最慢的一个part,并且自增到最大值时,会从头开始翻转计数。Trip Counter需要收发双方都保存,由于其变化较慢,所以不会经常进行同步该值。这就要求开发过程中保证每次对该值的读写必须要正确。

qq_22969363的博客 1154

Coze智能体实战:接口需求分析和接口调试

AI智能体的需求:能根据接口文档提取接口信息以及设计接口测试点,并进行接口调试返回接口测试结果。

十二测试录 282

String、StringBuffer和StringBuilder的区别

今天很大家来聊一下这个基础的问题 说他们三者之间的区别我总结为一下三点: 1.String长度不可变而StringBuffer和SringBuilder长度可变 2.他们的运行速度不同 :SringBuilder > StringBuffer > String 3.SringBuilder 线程不安全 和 StringBuffer线程安全 下面我来一个一个解释: 一.S...

gq1819597376的博客 346

反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释

反卷积的作用 卷积中padding的几个概念 No Padding Half(Same) Padding Full Padding 反卷积 反卷积中的Padding参数 反卷积的stride参数 反卷积总结 参考资料

iioSnail的博客 2万+

24 String、StringBuffer与StringBuilder快速上手

1 🚩String详解 1.1🏃🏻 String类的构造器很多,常用的有: 1.2🏃🏻 String有private final byte[] value;属性用于存放字符串 1.3 🏃🏻String 常用方法 2 🚩StringBuffer详解 2.1🏃🏻 StringBuffer的构造器 2.2🏃🏻 String 与StringBuffer之间的转换; 2.3🏃🏻StringBuffer的常用方法 3 🚩StringBuilder......

Zinksl的博客 412

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java中String、StringBuffer、StringBuilder

jdk1.8 源码,三个类的类图如下 说明: 是否可变对象 equals() 和hashcode() 是否线程安全 String 不可变对象 重写 StringBuffer 可变对象 未重写 线程安全(synchronized修饰方法) StringBuilder 线程不安全 首先明确什么不可变对象。一个对...

memory 198

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

从Java源码角度彻底理解String,StringBuilder和StringBuffer的区别

字符串,就是一系列字符的集合。 Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串,其中StringBuilder类是到jdk 1.5才新增的。字符串操作可以说是几乎每门编程语言中所必不可少的,你真的理解其内幕吗? 下面让我们开始探秘之旅吧! 1、既然都是用来封装字符串的,那为什么还要3个类来封装呢? 2、它们三者之间到底

程序猿开发日志【学习永无止境】 9030

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

String,StringBuffer,StringBuilder

https://www.cnblogs.com/dolphin0520/p/3778589.html

lanzijingshizi的博客 264

java中String、StringBuffer和StringBuilder的区别

首先我们说一下java中String、StringBuffer和StringBuilder的相同点: 通过源码我们可以发现无论是String,StringBuffer还是StringBuilder它们的底层都是使用char[]数组进行存储。 接着我们说一下它们三者之间的不同点: String:不可变的字符序列。 StringBuffer:可变的字符序列,是线程安全的,效率低。 Strin...

weixin_30404405的博客 86

探秘Java中String、StringBuilder以及StringBuffer

相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景。下面是本文的目录大纲:   一.你了解String类吗?   二.深入理解String、StringBuffer、StringBuilder   

小琼琼的博客 422

String, StringBuffer, StringBuilder

转自:https://segmentfault.com/a/1190000002683782 我们先要记住三者的特征: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 一、定义 查看 API 会发现,String、StringBuffer、StringBuilder 都实现了 CharSequ

V5级 的博客 298

String、StringBuffer、StringBuilder

原文出处: 海子 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String、StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景。下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String、StringBuffer、StringBuild

baidu_31071595的博客 262

String、Stringbuffer和StringBuilder的异同? String 为什么是不可变的?

String、Stringbuffer和StringBuilder的异同? String 为什么是不可变的? 1.可变性 简单的来说:String 类中使用 final 关键字修饰字符数组char[]来保存字符串,private final char value[],所以String 对象是不可变的。 补充:在 Java 9 之后,String 、StringBuilder 与 StringBuffer 的实现改用 byte 数组存储字符串 private final byte[] value 为什么使用

小布のJava世界 282

探秘Java中的String、StringBuilder以及StringBuffer

转自:http://www.cnblogs.com/dolphin0520/p/3778589.html 一.你了解String类吗?   想要了解一个类,最好的办法就是看这个类的实现源代码,String类的实现在   \jdk1.6.0_14\src\java\lang\String.java   文件中。   打开这个类文件就会发现String类是被final修饰的:

zjcheer_up的专栏 499

浅谈 Java 字符串(String, StringBuffer, StringBuilder)

转载自https://segmentfault.com/a/1190000002683782 我们先要记住三者的特征: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 一、定义 查看 API 会发现,String、StringBuffer、StringBuilder 都实现了 Char

谢建伟的博客 410

java源码解读之String,StringBuilder,StringBuffer

由于最近正好毕业了,正在找工作~~~

kyrin(云中鹤) 1830

【java】浅谈 Java 字符串(String, StringBuffer, StringBuilder)

String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常

lzm18064126848的专栏 541
上一篇: java同步线程(三)
下一篇: HashCode和Equals的区别
Round_Yuan
博客等级 码龄10年 26粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值