2024年最新【Java】JDK源码分析——StringBuffer(1),java面试知识点整理

分享

这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

Spring Cloud实战

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

Spring Boot实战

薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

面试题整理(性能优化+微服务+并发编程+开源框架+分布式)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

*   [10.append方法](about:blank#10append_168)

*   *   [1)参数为Object](about:blank#1Object_170)

    *   [2)参数为String](about:blank#2String_185)

*   [11.delete方法](about:blank#11delete_202)

*   [12.replace方法](about:blank#12replace_218)

*   [13.substring方法](about:blank#13substring_234)

*   [14.insert方法](about:blank#14insert_258)

*   [15.indexOf方法](about:blank#15indexOf_276)

*   [16\. reverse方法](about:blank#16_reverse_291)

*   [17\. toString方法](about:blank#17_toString_307)

*   [18\. writeObject方法](about:blank#18_writeObject_324)

*   [19\. readObject方法](about:blank#19_readObject_342)

一.概述

======================================================================

StringBuffer是java中用来处理字符串的类。不同于String,StringBuffer保存的字符串可以进行修改,拼接,删除等操作。相比于StringBuilder,StringBuffer几乎所有方法都被synchronized关键字修饰,因此StringBuffer是线程安全的,同时效率也比StringBuilder低。

StringBuffer.java中的相关代码:


public final class StringBuffer

    extends AbstractStringBuilder

    implements java.io.Serializable, CharSequence

{

…

}



**1.StringBuffer被final修饰,不能被继承。

2.继承了AbstractStringBuilder,StringBuffer中的方法基本都是通过AbstractStringBuilder实现。

3.实现了java.io.Serializable接口,可以进行序列化。

4. 实现了CharSequence接口,可以将字符串当成一个一个的字符处理。**

二.源码分析

========================================================================

1.全局变量


StringBuffer.java中的相关代码:


	// 缓存,保存最后一次调用toString方法返回的字符串

	// 当StringBuffer内容发生变化,缓存被清除

	private transient char[] toStringCache; 



	static final long serialVersionUID = 3388685877147921107L; // 用于序列化



	// 需要序列化的字段,用于序列化

	private static final java.io.ObjectStreamField[] serialPersistentFields =

    	{

        	new java.io.ObjectStreamField("value", char[].class),

        	new java.io.ObjectStreamField("count", Integer.TYPE),

        	new java.io.ObjectStreamField("shared", Boolean.TYPE),

    	};



2.常用的构造方法


1)无参数

StringBuffer.java中的相关代码:


    public StringBuffer() {

        super(16);

	}



默认情况下,调用构造方法,会调用父类的构造方法,分配一个容量为16个字符空间。

2)参数为int

StringBuffer.java中的相关代码:


    public StringBuffer(int capacity) {

        super(capacity);

	}



调用父类方法,指定需要分配的空间的大小来进行分配。

3)参数为String

StringBuffer.java中的相关代码:


    public StringBuffer(String str) {

        super(str.length() + 16);

        append(str);

	}



调用父类的方法,为字符串分配空间,同时再多分配出来16个字符大小的空间,防止之后字符串长度发生改变;保存字符串。

3.length方法


获取StringBuffer中字符串的长度。

StringBuffer.java中的相关代码:


    @Override

	public synchronized int length() {

    	// 返回已使用空间的数量,count为父类的全局变量

        return count;

	}



4.capacity方法


获取StringBuffer当前最大能保存的字符串的长度。

StringBuffer.java中的相关代码:


    @Override

	public synchronized int capacity() {

    	// 返回字符数组长度,value为父类的全局变量

        return value.length;

	}



5. ensureCapacity方法


对字符数组进行扩容,保证空间大小足够。

StringBuffer.java中的相关代码:


    @Override

	public synchronized void ensureCapacity(int minimumCapacity) {

    	// 调用父类的ensureCapacity方法

        super.ensureCapacity(minimumCapacity);

	}



6.trimToSize方法


缩容,对字符数组中没有使用的空间进行释放。

StringBuffer.java中的相关代码:


    @Override

	public synchronized void trimToSize() {

    	// 调用父类的trimToSize方法

        super.trimToSize();

	}



7. setLength方法


设置字符数组空间的大小。

StringBuffer.java中的相关代码:


    @Override

	public synchronized void setLength(int newLength) {

    	// 清除缓存

        toStringCache = null;

        // 调用父类的setLength方法

        super.setLength(newLength);

	}



8. charAt方法


获取字符串中指定位置的字符。

StringBuffer.java中的相关代码:


    @Override

	public synchronized char charAt(int index) {

    	// 若指定位置小于0或指定位置超过了字符串的长度

        if ((index < 0) || (index >= count))

            throw new StringIndexOutOfBoundsException(index);

        // 返回指定位置的字符

        return value[index];

	}



9. setCharAt方法


设置字符串中指定位置index的字符为ch。

StringBuffer.java中的相关代码:


    @Override

	public synchronized void setCharAt(int index, char ch) {

    	// 若指定位置小于0或指定位置超过了字符串的长度

        if ((index < 0) || (index >= count))

            throw new StringIndexOutOfBoundsException(index);

        // 清除缓存

        toStringCache = null;

        // 设置字符

        value[index] = ch;

	}



10.append方法


向当前字符串后再拼接一个字符串。

1)参数为Object

StringBuffer.java中的相关代码:


    @Override

	public synchronized StringBuffer append(Object obj) {

    	// 清除缓存

        toStringCache = null;

        // 调用父类的append方法

        super.append(String.valueOf(obj));

        // 返回

        return this;

	}



2)参数为String

StringBuffer.java中的相关代码:


    @Override

	public synchronized StringBuffer append(String str) {

    	// 清除缓存

        toStringCache = null;

        // 调用父类的append方法

        super.append(str);

        // 返回

        return this;

	}



其它参数形式的append方法的执行流程,也都是先清除缓存,再调用父类的append方法,最后返回。

11.delete方法


删除字符串中start到end之间的字符。

StringBuffer.java中的相关代码:


    @Override

	public synchronized StringBuffer delete(int start, int end) {

    	// 清除缓存

        toStringCache = null;

        // 调用父类的delete方法

        super.delete(start, end);

        // 返回

        return this;

	}



最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

af和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

[外链图片转存中…(img-0QBLZlEL-1715229698191)]

JAVA核心知识点+1000道 互联网Java工程师面试题

[外链图片转存中…(img-ABb9Tfsx-1715229698191)]

[外链图片转存中…(img-Dagl89Th-1715229698192)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-iWiKvvOH-1715229698192)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值