Java基础知识强化09:String、StringBuffer和StringBuilder使用

1. 对于三者使用的总结

(1).如果要操作少量的数据用 = String                        

(2).单线程操作字符串缓冲区下操作大量数据 = StringBuilder

(3).多线程操作字符串缓冲区下操作大量数据 = StringBuffer

2.

(1)String :

指向的是一个不可改变的字符串,要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的:

String str1 = "aaa";
str1 = "aaa"+"bbb";

(2)StringBuffer:

 String S1 = "This is only a" + " simple" + " test";
 StringBuffer Sb = new StringBuilder("This is only a").append(" simple").append(" test");

你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
 String S1 = "This is only a" + " simple" + " test”; 

其实就是:
 String S1 = "This is only a simple test"; 

所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = "This is only a";
String S3 = " simple";
String S4 = " test";
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下: StringBuffer > String

(3)StringBuilder:

java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

StringBuilder  MyStringBuilder =  new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
时间: 2024-10-05 04:58:39

Java基础知识强化09:String、StringBuffer和StringBuilder使用的相关文章

Java基础知识强化44:StringBuffer类之StringBuffer和String的相互转化

1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案例演示: 1 package cn.itcast_07; 2 3 /* 4 * 为什么我们要讲解类之间的转换: 5 * A -- B的转换 6 * 我们把A转换为B,其实是为了使用B的功能. 7 * B -- A的转换 8 * 我们可能要的结果是A类型,所以还得转回来. 9 * 10 * Strin

Java基础知识强化48:StringBuffer类之StringBuffer的三个面试题

1. 面试题:String,StringBuffer,StringBuilder的区别 ? 答:String是字符串内容不可变的,而StringBuffer和StringBuilder是字符串内容长度可变的: StringBuffer是同步的,数据安全,效率低. StringBuilder是不同步的,数据不安全,效率高. 2. 面试题:StringBuffer 和数组的区别? 答:二者都可以看出是一个容器,装其他的数据.但是呢,StringBuffer的数据最终是一个字符串数据,而数组可以放置任

java基础知识(15)----StringBuffer与StringBuilder

StringBuffer字符串缓冲区: 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符.特点:1:可以对字符串内容进行修改.2:是一个容器.3:是可变长度的.4:缓冲区中可以存储任意类型的数据.5:最终需要变成字符串. 容器通常具备一些固定的方法:1,添加.StringBuffer append(data):在缓冲区中追加数据.追加到尾部.StringBuffer insert(index,data):在指定位置插入数据.2,删除.StringBuffer delete(start

Java基础知识强化47:StringBuffer类之判断一个字符串是否对称案例

1. 分析:判断一个字符串是否是一个对称的字符串,我们只需要把字符串的第1个字符和最后1个字符,第2个字符和倒数第2个字符,…… 比较的次数是长度除以2. 2. 案例演示: 1 package cn.itcast_07; 2 3 import java.util.Scanner; 4 5 /* 6 * 判断一个字符串是否是对称字符串 7 * 例如"abc"不是对称字符串,"aba"."abba"."aaa"."mna

Java基础知识强化41:StringBuffer类之StringBuffer的替换功能

1. StringBuffer的替换功能: public  StringBuffer   replace(int  start,  int  end, String  str): 2. 案例演示: 1 package cn.itcast_04; 2 3 /* 4 * StringBuffer的替换功能: 5 * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换 6 */ 7 public cl

Java基础知识强化43:StringBuffer类之StringBuffer的截取功能

1. StringBuffer的截取功能: public String subString(int Start): public String subString(int Start, int end): 返回类型是String类型,和前面几个功能不一样,本身没有发生变化. 2. 案例演示: 1 package cn.itcast_06; 2 3 /* 4 * StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了 5 * public String substr

Java基础知识强化46:StringBuffer类之字符串反转的案例

1. 案例演示: 1 package cn.itcast_07; 2 3 import java.util.Scanner; 4 5 /* 6 * 把字符串反转 7 */ 8 public class StringBufferTest3 { 9 public static void main(String[] args) { 10 // 键盘录入数据 11 Scanner sc = new Scanner(System.in); 12 System.out.println("请输入数据:&quo

Java基础知识强化40:StringBuffer类之StringBuffer的删除功能

1. StringBuffer的删除功能: public StringBuffer  deleteCharAt(int index):删除指定位置的字符,并返回字符串缓冲区本身. public StringBuffer  delete(int start,  int end):删除从指定位置开始到指定位置结束的内容,并返回字符串缓冲区本身. 2. 案例演示: 1 package cn.itcast_03; 2 3 /* 4 * StringBuffer的删除功能 5 * public Strin

Java基础知识强化45:StringBuffer类之把数组拼接成指定格式的字符串的案例

1. 先看案例代码如下: 1 package cn.itcast_07; 2 3 /* 4 * 把数组拼接成一个字符串 5 */ 6 public class StringBufferTest2 { 7 public static void main(String[] args) { 8 // 定义一个数组 9 int[] arr = { 44, 33, 55, 11, 22 }; 10 11 // 定义功能 12 // 方式1:用String做拼接的方式 13 String s1 = arra