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 ...
随机推荐
- mybatis关联查询
场景:一个人有多个手机号,一个手机号对应一个人 CREATE TABLE test.mobile ( mid INT NOT NULL auto_increment, tel ), pid INT, ...
- sea.js总结
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架. 参考以下网址进行详细学习: https://segmentfault.com/a/1190000000357191?pag ...
- [技术翻译] 构建现代化的Objective-C (下)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3563880.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- 以boost::function和boost:bind取代虚函数
转自:http://blog.csdn.net/Solstice/archive/2008/10/13/3066268.aspx 这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不 ...
- linux下screen工具的简单使用
有时候,希望即使退出终端了,下次登录linux的时候,还能回到程序的控制界面,这个时候,screen工具就很有用了例如,写了一个从控制台读取屏幕输入的程序input_test,如果从终端退出了,下次登 ...
- 在Mac OS X中使用VIM开发STM32(3)
本文原创于http://www.cnblogs.com/humaoxiao,非法转载者请自重! 在上一篇文章中,我们安装了ctags插件,ctags能对我们的源代码文件中的元素建立索引表, ...
- C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
- VS2010开发环境最佳字体及配色方法
Fixedsys Excelsior 3.01 1. 首先下载字体:http://www.fixedsysexcelsior.com/ 脚本之家字体下载 2. 安装字体:control panel ...
- 【git】切换分支获取代码
Welcome to Git (version 1.9.5-preview20150319) Run 'git help git' to display the help index.Run 'git ...
- 6.MVC框架开发(文件上传)
1.需要设置表单的enctype="multipart/form-data"属性 2.在控制器中获取表单文件中数据 [HttpPost] public ActionResult A ...