`
阅读更多

StringBuffer的特点、定义、常用方法什么的就不说了,说些别的。

 

1、StringBuffer与String的本质区别:
先说说String。总所周知,String类的内容一旦声明就不可改变,即便通过连字符(+)进行追加内容改变的也只是其内存地址的指向。下面可以用实例证明下:
有一点需要先达成共识:拥有相同hashCode的两个对象,其内存地址必然相同。

public static void main(String[] args) {
	String str = "123";
	String str2=str;
	System.out.println(str.hashCode());//48690
	System.out.println(str2.hashCode());//48690
	str = str+"456";
	System.out.println(str.hashCode());//1450575459
	str = str+"789";
	System.out.println(str.hashCode());//-1867378635
}

实例当中的str与str2指向同一个地址:即str2指向str所在地址,所以他们有相同的hashCode。后面的代码在对str进行追加的时候,其hashCode随着追加的内容不断变化,说明str的内存地址也在不断的变化,也就是重新分配了内存地址,这个时候的str已经不是最开始声明的str了。

再说StringBuffer。StringBuffer是使用缓冲区的,本身是一个具体的操作类,所以它不能像String那样采用直接赋值的方式进行对象的实例化,必须通过构造方法来完成。它使用append方法追加内容,没追加一次其内容修改一次,但内容地址并不会发生变化。如下面的例子:

public static void main(String[] args) {
	StringBuffer strBuf = new StringBuffer("123");
	System.out.println(strBuf.hashCode());//12830537
	strBuf.append("456");
	System.out.println(strBuf.hashCode());//12830537
	strBuf.append("789");
	System.out.println(strBuf.hashCode());//12830537
	System.out.println(strBuf);//123456789
}

从结果可以看出,StringBuffer的内容被修改了但其内存地址一直没有发生过变化,也就证明了StringBuffer的append追加操作修改的是内容信息而不是内存地址。


总结:要是要操作的字符串内容是动态的可能会发生变化的,使用StringBuffer比较好,因为性能较String高。要是内容不更改那就使用String吧,毕竟String用起来更得心应手嘛!

2、StringBuffer的insert()方法:
StringBuffer的insert()用来插入数据,其重载方法有很多,这里就说往指定位置插入字符串。JDK上的说明如下:
public StringBuffer insert(int offset,String str):将字符串插入此字符序列中。


实例:该实例只往字符串的最前面和最后面添加内容:

public static void main(String[] args) {
	StringBuffer strBuf = new StringBuffer("123");
	System.out.println(strBuf);//123
	strBuf.insert(0,"456");//往最前面添加内容
	System.out.println(strBuf);//456123
	strBuf.insert(strBuf.length(),"789");//往最后面添加内容
	System.out.println(strBuf);//456123789
}

 

3、StringBuffer中的delete方法:
该方法用来删除StringBuffer中的指定内容。JDK中的说明为:
public StringBuffer delete(int start,int end) :移除此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符,如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改。
实例:

public static void main(String[] args) {
	StringBuffer strBuf = new StringBuffer("123456789");
	strBuf.delete(0,5);//移除下标从0-4的内容,也就是移除掉前5个
	System.out.println(strBuf);//6789
		
	StringBuffer strBuf2 = new StringBuffer("123456789");
	strBuf2.delete(2,5);//移除下标从2-4的内容,也就是移除掉3个
	System.out.println(strBuf2);//126789

	StringBuffer strBuf3 = new StringBuffer("123456789");
	strBuf3.delete(-1,5);//报错: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	System.out.println(strBuf3);
}

由API和实例可以得出:
a、StringBuffer中的内容下标从0开始;
b、delete操作删除的最后一个字符串的下标为end-1,而不是end
c、delete操作删除的字符串个数为:end-start个。
d、若start与end输入负数,则直接报错:下标越界

分享到:
评论

相关推荐

    Java中StringBuffer类.pdf

    Java中的`StringBuffer`类是一个非常重要的工具,尤其在处理字符串的构建和修改时,它提供了比`String`类更高效的方法。`String`类是不可变的,这意味着每次对`String`对象进行修改时,都会创建一个新的字符串对象,...

    详解Java中StringBuffer类常用方法

    - `delete()` 和 `deleteCharAt()`:这两个方法用于删除StringBuffer中的部分字符。`delete(start, end)`删除从`start`到`end-1`的字符,`deleteCharAt(index)`删除索引`index`处的字符。 - `replace()`:替换...

    JAVA的StringBuffer类.docx

    Java中的`StringBuffer`类是一个非常重要的工具,特别是在处理字符串时需要频繁进行修改的情况。与`String`类不同,`StringBuffer`不会在每次修改时创建新的对象,从而减少了内存开销,提高了性能。在多线程环境中,...

    Java语言中StringBuffer的用法

    在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。相较于`String`类,`StringBuffer`提供了线程安全的动态字符串构建,避免了频繁创建新对象带来的性能开销。本文将深入探讨`...

    java高级特性StringBuffer类.doc

    Java 高级特性中,StringBuffer 类是一个非常重要的类,它和 String 类一样用来代表字符串,但是由于内部实现方式的不同,StringBuffer 在进行字符串处理时,不生成新的对象,在内存使用上要优于 String 类。...

    StringBuffer类思维导图.mm

    对于Java中StringBuffer类的有关问题做下的思维导图,便于深化记忆,希望对你有帮助!注意:文件为.mm后缀建议下载freemind打开,免费的思维导图软件!

    Java中StringBuffer对象的初始化.pdf

    在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。与`String`类不同,`StringBuffer`是可变的(mutable),这意味着它的内容可以在创建后进行修改,而无需创建新的对象。这种...

    javaString 和StringBuffer的区别

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候...

    Java中StringBuffer的常用方法.pdf

    总结来说,Java中的StringBuffer类提供了许多对字符串进行动态修改的方法,相较于不可变的String类,StringBuffer在处理大量字符串操作时更高效。append方法用于在末尾添加内容,deleteCharAt和delete方法可以删除...

    2011年(上)全国信息技术水平考试计算机程序设计技术水平证书(JAVA语言)考试试卷.pdf

    2. 类和继承:文档提到了class Employee{},class Manager extends Employee{}以及class Director extends Employee{},说明了在Java中类可以继承其他类的特性,其中Manager和Director都继承自Employee,这体现了...

    JAVA_StringBuffer

    在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串操作时,尤其是在多线程环境中。这个类被设计用来高效地构建和修改字符串内容,它提供了线程安全的方法,使得多个线程可以同时对字符串...

    StringBuffer类的总结

    `StringBuffer` 类在 Java 中有着广泛的应用场景,特别是在需要对字符串进行频繁修改的情况下。掌握了 `StringBuffer` 类的使用方法,可以极大地提高开发效率并减少资源消耗。同时,需要注意的是,在单线程环境下,...

    java之StringBuffer常见使用方法解析

    今天,我们来聊聊Java中的StringBuffer类,它是一个非常重要的字符串缓冲区类,广泛应用于Java编程中。下面,我们将详细介绍StringBuffer类的使用方法和应用场景。 什么是StringBuffer类? StringBuffer类是一个...

    Java中StringBuffer和StringBuilder_动力节点Java学院整理

    在Java编程语言中,`StringBuffer`和`StringBuilder`类都是用来处理字符串的,它们的主要功能是构建和操作字符串。这两个类与`String`类不同,`String`类是不可变的,这意味着一旦创建了一个`String`对象,就不能...

    JAVA中String与StringBuffer的区别 自己的学习笔记总结

    在Java编程语言中,`String` 和 `StringBuffer` 都是非常重要的类,它们用于处理字符串数据。虽然它们都实现了字符串操作的功能,但它们之间存在一些重要的区别,这些区别主要体现在性能、线程安全以及可变性等方面...

    String StringBuffer和StringBuilder区别之源码解析

    在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...

    JAVA中String类与StringBuffer类的区别

    在Java编程语言中,String类和StringBuffer类是处理字符串的两种主要方式,它们各自有不同的特性和适用场景。理解二者的区别对于编写高效、优化的代码至关重要。 1. **String类**: - **不可变性**:String类的...

    Java中的String、StringBuffer和Math类

    ### Java中的String、StringBuffer和Math类 #### String类详解 **String类**在Java中扮演着极其重要的角色,主要用于处理不可变的字符序列。它不仅功能强大而且使用广泛,几乎所有的Java应用程序都会涉及到字符串...

    浅析Java中String与StringBuffer拼接的区别

    在Java编程语言中,String和StringBuffer类都用于处理字符串,但它们在处理字符串拼接时有着显著的区别。本文将详细解析这两个类在拼接字符串时的行为差异。 首先,我们来了解一下String类。String对象在Java中是不...

Global site tag (gtag.js) - Google Analytics