一、定义:
字符串是字符的序列、它可以包含字母、数字和其他符号。
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
StringBuffer类代表一个线程安全的可变序列。
StringBuilder类代表一个可变序列。若将 StringBuilder 的实例用于多个线程是不安全的。
二、用途:
String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
StringBuffer 类的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
StringBuilder类是与StringBuffer 兼容的 API,但不保证同步,多线程也不安全。
三、两个问题
1、可变性
String类构造的对象是不变的,从它的方法可以看出,方法只有读,就连转换大小写都是先创建副本后改变大小写。这里的不变性个人觉得就是在实例化后,String对象的大小,内容等基本属性都是 不能改变的是定值。
由于它的不变性带来了一些麻烦,当我们想让它变的时候,它就是变不了,所以StringBuffer和StringBuilder两个类想救世主一样“搜得一身”解决了可变的问题,
类似于给String类带了个拖斗----字符串缓冲区。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
自此可变与不可变都能随心所变,很爽吧。。嗦哒斯馁
2.字符串的处理能力
StringBuffer和StringBuilder两个类很好的解决可变问题,可是对于这个类的g功能不完善,字符串处理能力极弱、积弱、极弱(跟String类相比而言),里面基本方法都有就是少了很多String类中处理字符串的必备利器,最重要的split(),startWith(),trim()等等,但是类中有个toString()方法解决了这个问题,也许是设计懒得重复造轮子“去找String处理去吧!”
3.区别是什么
对于字符串个数<1000字符时 新建String对象和StringBuffer对象和StringBuilder对象,区别不大,有时String对象的创建速度会比其他两个快,
超过10000个字符时,毋庸置疑,后者效率更高。
但在1000到10000之间差别会很大。(摘自数据结构与算法)
JAVA测试数据
字符长度1000-----StringBuffer程序运行时间: 0ms
字符长度1000-----String程序运行时间: 0ms
字符长度1000-----StringBuilder程序运行时间: 0ms
>>>>>>>>>>>>
字符长度10000-----StringBuffer程序运行时间: 15ms
字符长度10000-----String程序运行时间: 187ms
字符长度10000-----StringBuilder程序运行时间: 0ms
>>>>>>>>>>>>
字符长度100000-----StringBuffer程序运行时间: 0ms
字符长度100000-----String程序运行时间: 29580ms
字符长度100000-----StringBuilder程序运行时间: 0ms
>>>>>>>>>>>>
1000000电脑没有了反应。
测试代码
public static void test( int size) {
StringBuffer sBuffer=new StringBuffer();
StringBuilder sBuilder=new StringBuilder();
String string="";
long startTime=System.currentTimeMillis(); //获取开始时间
for (int i = 0; i < size; i++) {
sBuffer.append("a");
}
long endTime=System.currentTimeMillis();
long startTime1=System.currentTimeMillis(); //获取开始时间
for (int i = 0; i < size; i++) {
string +="a";
}
long endTime1=System.currentTimeMillis();
long startTime2=System.currentTimeMillis(); //获取开始时间
for (int i = 0; i < size; i++) {
sBuilder.append("a");
}
long endTime2=System.currentTimeMillis();
System.out.println("字符长度"+size+"-----StringBuffer程序运行时间: "+(endTime-startTime)+"ms");
System.out.println("字符长度"+size+"-----String程序运行时间: "+(endTime1-startTime1)+"ms");
System.out.println("字符长度"+size+"-----StringBuilder程序运行时间: "+(endTime2-startTime2)+"ms");
System.out.println(">>>>>>>>>>>>");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test(1000);
test(10000);
test(100000);
test(1000000);
}
分享到:
相关推荐
在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...
在Java编程语言中,`StringBuffer`和`StringBuilder`是两个非常重要的类,它们主要用于处理字符串的拼接和修改操作。这两个类位于`java.lang`包下,因此在使用时无需显式导入。本篇文章将深入探讨这两个类的特性和...
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...
在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String 对象,就不能修改它的值。每次对 String 对象的...
根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...
String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段...
String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...
为了解决这个问题,Java提供了`StringBuffer`和`StringBuilder`类,它们允许我们高效地修改字符串。 #### 2. StringBuffer类的使用 - **构造方法**: - `public StringBuffer()` - 创建一个空的`StringBuffer`。...
在Java中,`String`类是非常重要的一个类,它提供了大量的方法来处理字符串。字符串在Java中是不可变的对象,也就是说一旦创建了一个`String`对象,它的内容就不能被改变。这使得`String`对象非常适合用于缓存和其他...
在Java编程语言中,String和StringBuilder是两个非常重要的类,它们在处理文本字符串时起着核心作用。了解这两个类的特点和使用场景对于提高程序性能至关重要。 首先,`String`类在Java中是不可变的,这意味着一旦...
Java提供了两种主要的方式来创建字符串:通过`String`类的构造方法和使用`StringBuilder`或`StringBuffer`类。以下是对这些知识点的详细解释: 1. **String类**: - **不可变性**:Java中的`String`对象是不可变的...
最后,让我们总结一下 Java 中 String, StringBuffer 与 StringBuilder 三种字符串类型的区别和用法。String 类型是不可变的对象,性能不好,适合不需要修改的字符串对象。StringBuffer 类型是可变的对象,性能好,...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的对象,但它们之间存在显著的区别。String是最常见的字符串类型,它的特点是不可变性。这意味着一旦一个String对象被创建,就不能进行...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自有特定的使用场景和特性。理解这三个类的区别对于任何Java开发者,无论是初学者还是经验丰富的程序员,都是非常重要的...
总结,Java基础知识涵盖了字符串操作、输入/输出处理、基本数据类型包装类等多个核心概念,这些都是Java程序员必须掌握的基础。理解并熟练运用这些知识,能帮助开发者编写更高效、更具可维护性的代码。
Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...
Java基础知识中,Java常用类是非常重要的一部分,本节讲义将对String、StringBuffer、StringBuilder、Date、DateFormat、Random、Math等类进行详细的介绍。 String类 String类是Java中最基本的字符串类,它是final...