StringBuffer
①StringBuffer的内容是可变的,在对StringBuffer的内容进行修改时,他
不会产生新的对象,只是在原来的基础上进行修改;
②StringBuffer是线程安全的,同步,效率相对StringBuild来说比较低
③继承了AbstractStringBuilder类
③StringBuffer类里的常用方法解析(按字母排序):
a)方法一:构造方法
ep1:
public StringBuffer() { super(16); } ep2: public StringBuffer(int capacity) { super(capacity); }
ep3:
public StringBuffer(String str) { super(str.length() + 16); append(str); }
作用:构造方法,创建StringBuffer对象,它不能直接像String那样
(比如:String s="Hello";)直接赋值,它需要经过构造方法来对一个
对象进行赋值;
解释:
ep1:StringBuffer sb1=new StringBuffer();会为对象保留16个字符的扩展空间 ep2: StringBuffer sb2=new StringBuffer(24);创建容量大小为24个字符的对象 ep3:StringBuffer sb3=new StringBuffer("hello");根据String对象创建一个 StringBuffer对象,并会为这个对象额外的保留16个字符空间;
b)方法二:public synchronized StringBuffer append(String str)
//StringBuffer中 public synchronized StringBuffer append(String str) { super.append(str); return this; } //AbstractStringBuffer中 public AbstractStringBuilder append(String str) { if (str == null) str = "null"; int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; }
作用:这是StringBuffer的核心方法,字符串进行拼接时,采用append方法并不会
创建一个新的StringBuffer的对象;
解释:如果追加的数据为一个null,则直接在源对象后面追加null即可;
如果不为空,则先扩大容量,然后改变源对象的值,最后改变源对象的大小
(这个大小指调用length()方法后返回的值)
c)方法三:
//StringBuffer中 public synchronized StringBuffer insert(int offset, String str) { super.insert(offset, str); return this; } //AbstractStringBuffer中 public AbstractStringBuilder insert(int offset, String str) { if ((offset < 0) || (offset > length())) throw new StringIndexOutOfBoundsException(offset); if (str == null) str = "null"; int len = str.length(); ensureCapacityInternal(count + len); System.arraycopy(value, offset, value, offset + len, count - offset); str.getChars(value, offset); count += len; return this; }
作用:在指定位置(offset)插入字符串;
解释:先判断参数offset是否为合法下标,如果合法,则执行以下操作,否则,
抛出String下标越界异常(StringIndexOutOfBounsException);
再判断插入的是否为null,如果为null值,则将str="null",准备插入StringBuffer
对象中,如果不为空,则先扩大容量,再插入值,最后改大小,返回插入后的对象值;
④测试String和StringBuffer修改内容的效率
ep1: String tempstr = "abc"; int times = 5000; long lstart1=System.currentTimeMillis(); String str =""; for(int i=0;i<times;i++){ str+=tempstr; } long lend1=System.currentTimeMillis(); long time1 = (lend1-lstart1); System.out.println(time1); //结果:32 ep2: String tempstr = "abc"; int times = 5000; long lstart1=System.currentTimeMillis(); StringBuffer strBuffer =new StringBuffer(); for(int i=0;i<times;i++){ strBuffer.append(tempstr); } long lend1=System.currentTimeMillis(); long time1 = (lend1-lstart1); System.out.println(time1); } //结果:0
相关推荐
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
Java基础知识是编程学习的重要组成部分,尤其是对于Java语言来说。Java是一种广泛使用的面向对象的编程语言,以其平台独立性、强大的库支持和高效性能著称。本篇文章将深入探讨Java基础知识中的关键概念,包括字符串...
在Java编程语言中,`StringBuffer`和`StringBuilder`是两个非常重要的类,它们主要用于处理字符串的拼接和修改操作。这两个类位于`java.lang`包下,因此在使用时无需显式导入。本篇文章将深入探讨这两个类的特性和...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 ...
这个压缩包文件包含了针对Java初学者和求职者的一系列面试题目,主要涵盖了Java基础知识。这些题目旨在检验和提升候选人在Java编程语言的理解、基本概念、语法和常见问题解决能力。下面将详细讨论其中可能涵盖的知识...
Java基础知识面试题(2022最新版) Java概述 ---------------- * 什么是Java?Java是一种高级的、基于对象的、面向网络的编程语言。 * Java的历史和发展,Java的版本发展:JDK1.5之后的三大版本:JVM、JRE、JDK。 ...
计算机后端-Java-Java核心基础-第21章 常用类 20. StringBuffer的源码分析.avi
【Java核心知识总结-笔记】 JavaSE高级部分的讲解涵盖了重要的String类、集合以及IO流。String类在Java中扮演着至关重要的角色,因为它是最常用的数据类型之一,用于存储和处理文本信息。以下是对String类的详细...
计算机后端-Java-Java核心基础-第21章 常用类 21. StringBuffer中的常用方法.avi
- **线程基础知识** - Java 线程模型、线程生命周期、线程同步等。 **1.7 Java 5.0多线程编程** - **高级主题** - 如并发工具类、锁机制等。 **1.8 Java Socket编程** - **网络编程基础** - 使用 `Socket` 和...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...