可变字符串(StringBuffer和StringBuilder)
一.(StringBuffer类):
由于字符串String是常量,一旦被创建,其内容和长度不可被修改。如果需要对一个字符串进行修改,只能创建新的字符串。为了对字符串进行修改,Java提供了一个StringBuffer类(字符缓冲区)。StringBuffer类和String类的最大区别在于它的长度和内容都是可以改变的。StringBuffer类似于一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,不会产生新的StringBuffer对象。
增:StringBuffer append(XXX) | 添加XXX到StringBuffer对象中 |
删一个字符:StringBuffer deleteCharAt(int index) | 删除下标为index处的字符 |
删一段字符或字符串序列:StringBuffer delete(int start,int end) | 删除下标以start开始,end-1结尾处的字符串序列(包头不包尾) |
改一个字符:void setCharAt(int index,char c) | 用字符c替换下标为index处的字符 |
改一个字符串:StringBuffer replace(int start,int end,String newStr) | 将指定范围的字符串替换成newStr(包头不包尾) |
插字符串:StringBuffer insert(int start,XXX) | 将XXX插入到下标为start的前面 |
String toString( ) | 返回StringBufffer缓冲区中的字符串 |
StringBuffer reverse() | 反转字符串序列 |
StringBuffer() | 空的可变序列 |
StringBuffer(String str) | 根据指定字符串创建可变序列 |
package StringBuffer和StringBuilder;public class Demo1 {public static void main(String[] args) {StringBuilder sb=new StringBuilder("abcd");sb.append(true);System.out.println(sb);sb.delete(2,5);//删除的2 3 4 下标的字符System.out.println(sb);sb.setCharAt(0,'F');System.out.println(sb);sb.replace(2,5,"ooo");System.out.println(sb);sb.insert(1,"mm");System.out.println(sb);}
}
二(StringBuilder类):
StringBuilder类是JDK5中新加的类,和StringBuffer之间的区别在于:StringBuilder的方法是线程不安全的,即StringBuffer不能被同步访问,而StringBuilderr可以同步访问。StringBuilder类的常见操作和StringBuffer类似,可以参考上面的StringBuffer类。
三(String类,StringBuffer类和StringBuilder类之间的效率测试):
package day1113;
/*
String StringBuffer StringBuilder效率对比使用三个不同类型对字符串进行拼接频繁对字符串进行增删改插操作的时候使用StringBuilder*/
public class StringDemo02 {public static void main(String[] args) {/*String效率测试使用String拼接数字到200000*/long startTime=0;long endTime=0;String s1="";//获取系统时间|:System.currentTimeMillis()---获取当前系统的毫秒值startTime=System.currentTimeMillis();for (int i=1;i<=200000;i++){s1=s1+i;//字符串的拼接}endTime=System.currentTimeMillis();System.out.println("使用String拼接数字1到200000花了"+(endTime-startTime)+"毫秒!");/*StringBuffer效率测试使用StringBuffer拼接数字1-200000*/StringBuffer sb1=new StringBuffer("");startTime=System.currentTimeMillis();for (int i=1;i<=200000;i++){sb1.append(String.valueOf(i));//把i变成String然后再拼接}endTime=System.currentTimeMillis();System.out.println("使用StringBuffer拼接数字1到200000花了"+(endTime-startTime)+"毫秒!");/*StringBuilder效率测试使用StringBuilder拼接数字1-200000*/StringBuilder sb2=new StringBuilder("");startTime=System.currentTimeMillis();for (int i=1;i<=200000;i++){sb2.append(String.valueOf(i));//把i变成String然后再拼接}endTime=System.currentTimeMillis();System.out.println("使用StringBuilder拼接数字1到200000花了"+(endTime-startTime)+"毫秒!");}
}
从最终结果可看出,三者的工作效率为:StringBuilder>StringBuffer>String
四(StringBuffer和StringBuilder间的线程安全性与工作效率性对比):
StringBuffer | StringBuilder |
方法采用了加锁,线程安全 | 方法没有采用加锁,线程不安全 |
工作效率低 | 工作效率高 |
五(String类,StringBuffer类和Stringbuilder类之间的不同之处):
1.String类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的。而StringBuffer类和StringBuilder类表示字符容器,其内容和长度都可以改变。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可;如果需要对字符串中的字符进行添加或删除时,则应使用StringBuffer类或StringBuilder类;如果有大量字符串拼接操作时,在不要求线程安全的前提下,采用StringBuilder类更高效;若需要保证线程安全,则使用StringBuffer类。
2.String类重写了Object类的equals()方法,而StringBuffer类和StringBuilder类都没有重写Object类的equals()方法。
package StringBuffer和StringBuilder;public class Demo3 {public static void main(String[] args) {String str1=new String("abc");String str2=new String("abc");boolean result=str1.equals(str2);System.out.println("String中str1和str2:"+result);StringBuffer str3=new StringBuffer("abc");StringBuffer str4=new StringBuffer("abc");boolean result1=str3.equals(str4);System.out.println("StringBuffer中str3和str4:"+result1);StringBuilder str5=new StringBuilder("abc");StringBuilder str6=new StringBuilder("abc");boolean result2=str5.equals(str6);System.out.println("StringBuilder中str5和str6:"+result2);}
}
3.String类对象可以用操作符“+”进行拼接,而StringBuffer类对象和StringBuilder类对象不能用操作符“+”进行拼接。
可变字符串(StringBuffer和StringBuilder)相关推荐
- String类菜鸟级教程(字符串常量池及不可变,StringBuffer 和 StringBuilder)
文章目录 前言 1.创建字符串 2.字符串比较相等 2.1字符串传参 3.字符串常量池 4.字符串创建实例分析 5.理解字符串不可变 6.字符, 字节与字符串 6.1字符与字符串 6.2字节与字符串 ...
- 关于可变字符串StringBuffer和String的区别总结
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...
- Java中字符串对象String、StringBuffer、StringBuilder的比较
原文地址:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉, ...
- 偷窥JAVA字符串三姐妹-String、StringBuffer、StringBuilder
本文转自我的blog:产品经理新视线 builder最佳 单线程就用StringBuilder吧~~ 她技巧最好~最忠诚~让你一个人爽翻天~~~ 多线程就用StringBuffer吧~~ 她就是一Bu ...
- 小瓜牛漫谈 — String、StringBuffer、StringBuilder
任何一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们 ...
- String、StringBuffer与StringBuilder之间区别
String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...
- [转]String、StringBuffer与StringBuilder之间区别
String是一个不可变对象,每次对String对象操作时都是产生新的对象,然后将指向新的String对象,故如果涉及大量对String的操作时会造成资源的浪费. 一.Java String 类--S ...
- Java的知识点21——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱
String类 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" substring()是对字符串的截取操作,但本质是读取原 ...
- Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识
文章目录 String类 StringBuffer类 StringBuilder类 String:不可变的字符序列:底层使用char[]存储 StringBuffer:可变的字符序列:线程安全的,效率 ...
最新文章
- Supervisor使用详解
- gen_cam_par_area_scan_division和gen_cam_par_area_scan_polynomial区别
- apollo local 模式_Java客户端使用指南 - 五、本地开发模式 - 《携程 Apollo v1.4 开发指南》 - 书栈网 · BookStack...
- 并发编程-13线程安全策略之两种类型的同步容器
- MODS: Fast and Robust Method for Two-View Matching
- mysql 云主机名_mysql部署到云主机的笔记
- eclipse java maven_java – 非常轻量级的Eclipse-Maven集成 – 仅...
- CCN(content centric networking)介绍
- 计算机基础类报刊,全国“xx杯”计算机应用基础类说课大赛优秀作品:图文表混排-制作感恩报刊说课课件...
- 恋爱物语iapp源码导入就可以用
- React使用jsbarcode条形码插件
- 计算机机房系统建设,计算机机房系统建设方案(范文).pdf
- 启发式搜索 :A*算法详解
- boost电路公式详解
- xp系统计算机怎么连接到网络打印机,xp打印机共享怎么设置(教你如何在电脑上连接XP系统的共享打印机)...
- 为什么JBX写的代码在编译时,总是少字符呢?
- TI高精度实验室-运算放大器-第十六节-全差分放大器
- 基于51单片机的呼出有毒气体(煤气、酒精、co)检测仪设计
- 右键新建没有Word怎么办?右键新建添加Word方法!
- Android P 中的网络安全配置指南 network-security-config
热门文章
- 【分布式篇】什么是分布式ID?分布式ID常见解决方案有哪些?
- 微信小程序数组push报错
- 西门子s7-1200使用蒲公英路由器异地组网,实现远程调试,配置组态修改程序。
- 【Java笔记】集合(Collection接口)的使用
- 数据结构、数据类型、抽象数据类型之间的关系
- 【惊爆】中国移动网上营业厅出现重大BUG
- split(“\\s+“)
- tabBar找不到图片解决方法
- 使用java命令出现Error: A JNI error has occurred, please check your installation and try again的错误
- Objective-C学习笔记-之方括号[]