Java之String,StringBuffer,StringBuilder类
在 java 语言中, 用来处理字符串的的类常用的有 3 个: String、StringBuffer、StringBuilder。
它们的异同点:
1) 都是 final 类, 都不允许被继承;
2) String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的;
3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的。就是说StringBuffer类中的很多方法使用了synchronized关键字修饰,允许多线程进行操作字符串。
三个类大部分时间性能:StringBuilder》StringBuffer》String。
4) StringBuffer 和StringBuilder 方法的使用基本上一样
使用以下代码测试性能:
public class TestStringClass {
private final int LOOPS = 200000;
private final String CONSTANT_STRING = "java-String";
public static void main(String[] args) {
new TestStringClass().testString();
new TestStringClass().testStringBuffer();
new TestStringClass().testStringBullder();
}
public void testString() {
String string = "";
long currentTime = System.currentTimeMillis();
for (int i = 0; i < LOOPS; i++) {
string += CONSTANT_STRING;
}
long endTime = System.currentTimeMillis();
System.out.println("String: " + (endTime - currentTime));
}
public void testStringBuffer() {
StringBuffer stringBuffer = new StringBuffer();
long currentTime = System.currentTimeMillis();
for (int i = 0; i < LOOPS; i++) {
stringBuffer.append(CONSTANT_STRING);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBuffer: " + (endTime - currentTime));
}
public void testStringBullder() {
StringBuilder stringBuilder = new StringBuilder();
long currentTime = System.currentTimeMillis();
for (int i = 0; i < LOOPS; i++) {
stringBuilder.append(CONSTANT_STRING);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBullder: " + (endTime - currentTime));
}
}
结果:
String: 149549
StringBuffer: 9
StringBullder: 7
差别很明显。String的性能差的厉害。
但是呢,假如在编译阶段使用字符串常量的话,String的性能会很快的。
总结:
1.在编译阶段使用字符串常量的话,使用String。比如:String haha = "I" + " am " + "java";
2.在不考虑线程安全的情况下,StringBuilder对象的append效率高于StringBuffer对象的append效率要高于String对象的"+"连接操作。
3.多线程同步的情况下,建议使用StringBuffer。
Java之String,StringBuffer,StringBuilder类的更多相关文章
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- java ——String , StringBuffer, StringBuilder类
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==” 比较两个对象是否引用同一 ...
- java中String,StringBuffer,StringBuilder之间的区别
文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...
- Java的String&StringBuffer&StringBuilder
一:String类 1.String对象的初始化 由于String对象特别用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = "ab ...
- java 比较String StringBuffer StringBuilder
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- Java学习|String,StringBuffer,StringBuilder?
1 String (1) String的创建机理 由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池.其运行机制是:创建一个字 ...
- JAVA中String和StringBuilder类的特点及使用
转自:https://www.imooc.com/code/2202 仅做个人学习记录之用,侵删! 什么是 Java 中的字符串 在 Java 中,字符串被作为 String 类型的对象处理. Str ...
- Java中String/StringBuffer/StringBuilder区别(转)
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String <(StringBuffer,StringBuild ...
随机推荐
- lua package path 设置方法
lua package path 设置方法: 添加环境变量LUA_PATH="/add_path/?.lua;;" 1.add_path为新添加的目录: 2.一定要添加双引号: 3 ...
- 第五篇、C_二叉搜索树
1.二叉树的查找功能的时间复杂度比链表的好 2.删除节点的稍微复杂点 >没有节点,直接删除 >只有左节点(或者右节点),直接用该节点的左节点(或者右节点)替代要删除的节点 >有左节点 ...
- CocoaPods的使用详解
CocoaPods是什么 当我们开发 iOS 项目时候,会经常使用到第三方类库,并且会使用很多.大家的做法基本上都是到 GitHub 上下载一个一个的类库,然后导入到工程中,并且引入各种的类库,做各种 ...
- .net 生成pdf表格
只需要建一个类文件就搞定了 public class CreatePDF { public static CreatePDF Current { get { return new CreatePDF( ...
- android测试的相关概念以及单元测试
1.测试的相关概念 1.根据是否知道源代码分类: 黑盒测试: a - b - c 边值测试 白盒测试: 根据源代码写测试方法 或者 测试用例; 2.根据测试的粒度分类: 方法测试:写完一个方 ...
- POJ 2559 Largest Rectangle in a Histogram -- 动态规划
题目地址:http://poj.org/problem?id=2559 Description A histogram is a polygon composed of a sequence of r ...
- OpenJudge/Poj 2001 Shortest Prefixes
1.链接地址: http://bailian.openjudge.cn/practice/2001 http://poj.org/problem?id=2001 2.题目: Shortest Pref ...
- yiic创建YII应用 "php.exe"不是内部或外部命令 解决办法
第一步:运行CMD命令. 第二步:进入Yiic文件的目录 (例如在D盘里面 D:/yii/framework) 第三步:D:\yii\framework>yiic webapp D: ...
- top每个参数的意义
上图来源于本人虚拟机,作为每个参数解释的参考 10:32:20:现在的时间 up 1 min : 服务器运行的时长 1 user:现在只有1个用户登录 load average: 0.74, 0.25 ...
- jQuery.hhNewSilder 滚动图片插件
/** * jQuery.hhNewSilder 滚动图片插件 * User: huanhuan * QQ: 651471385 * Email: th.wanghuan@gmail.com ...