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`类是一个非常重要的工具,尤其在处理字符串的构建和修改时,它提供了比`String`类更高效的方法。`String`类是不可变的,这意味着每次对`String`对象进行修改时,都会创建一个新的字符串对象,...
- `delete()` 和 `deleteCharAt()`:这两个方法用于删除StringBuffer中的部分字符。`delete(start, end)`删除从`start`到`end-1`的字符,`deleteCharAt(index)`删除索引`index`处的字符。 - `replace()`:替换...
Java中的`StringBuffer`类是一个非常重要的工具,特别是在处理字符串时需要频繁进行修改的情况。与`String`类不同,`StringBuffer`不会在每次修改时创建新的对象,从而减少了内存开销,提高了性能。在多线程环境中,...
在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。相较于`String`类,`StringBuffer`提供了线程安全的动态字符串构建,避免了频繁创建新对象带来的性能开销。本文将深入探讨`...
Java 高级特性中,StringBuffer 类是一个非常重要的类,它和 String 类一样用来代表字符串,但是由于内部实现方式的不同,StringBuffer 在进行字符串处理时,不生成新的对象,在内存使用上要优于 String 类。...
对于Java中StringBuffer类的有关问题做下的思维导图,便于深化记忆,希望对你有帮助!注意:文件为.mm后缀建议下载freemind打开,免费的思维导图软件!
在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。与`String`类不同,`StringBuffer`是可变的(mutable),这意味着它的内容可以在创建后进行修改,而无需创建新的对象。这种...
在Java编程语言中,StringBuffer类是一个用于处理字符串的重要工具。与String类不同,StringBuffer对象是可变的,这意味着它们的内容可以在对象创建后进行修改。这使得StringBuffer非常适合于需要频繁修改字符串的...
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候...
2. 类和继承:文档提到了class Employee{},class Manager extends Employee{}以及class Director extends Employee{},说明了在Java中类可以继承其他类的特性,其中Manager和Director都继承自Employee,这体现了...
在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串操作时,尤其是在多线程环境中。这个类被设计用来高效地构建和修改字符串内容,它提供了线程安全的方法,使得多个线程可以同时对字符串...
`StringBuffer` 类在 Java 中有着广泛的应用场景,特别是在需要对字符串进行频繁修改的情况下。掌握了 `StringBuffer` 类的使用方法,可以极大地提高开发效率并减少资源消耗。同时,需要注意的是,在单线程环境下,...
今天,我们来聊聊Java中的StringBuffer类,它是一个非常重要的字符串缓冲区类,广泛应用于Java编程中。下面,我们将详细介绍StringBuffer类的使用方法和应用场景。 什么是StringBuffer类? StringBuffer类是一个...
在Java编程语言中,`StringBuffer`和`StringBuilder`类都是用来处理字符串的,它们的主要功能是构建和操作字符串。这两个类与`String`类不同,`String`类是不可变的,这意味着一旦创建了一个`String`对象,就不能...
在Java编程语言中,`String` 和 `StringBuffer` 都是非常重要的类,它们用于处理字符串数据。虽然它们都实现了字符串操作的功能,但它们之间存在一些重要的区别,这些区别主要体现在性能、线程安全以及可变性等方面...
在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...
在Java编程语言中,String类和StringBuffer类是处理字符串的两种主要方式,它们各自有不同的特性和适用场景。理解二者的区别对于编写高效、优化的代码至关重要。 1. **String类**: - **不可变性**:String类的...
### Java中的String、StringBuffer和Math类 #### String类详解 **String类**在Java中扮演着极其重要的角色,主要用于处理不可变的字符序列。它不仅功能强大而且使用广泛,几乎所有的Java应用程序都会涉及到字符串...
在Java编程语言中,String和StringBuffer类都用于处理字符串,但它们在处理字符串拼接时有着显著的区别。本文将详细解析这两个类在拼接字符串时的行为差异。 首先,我们来了解一下String类。String对象在Java中是不...