String、StringBuilder、StringBuffer 区别
public static void testStringBuffer(){
long start System currentTimeMillis();
StringBuffer sbuf = new StringBuffer();
for(int=0;i<20000;i++){
sbuf.append(i+",");
}
System.out.println(System, currentTimeMillis()- start);
}
public static void teststringBulider(){
long start = System currentTimeMillis();
StringBuilder builder = new StringBuilder(
for (int i =0; i< 20000: i++)(
builder. append(i +",");
System, out. printIn(System. currentTimeMilliso- start);
}
}
public static void main(String[] args){
teststring();
teststringBuffer();
teststringBulider();
}
区别一:性能
运行结果如下:1217 9 6
从测试结果看出, String类每次追加字符串都会创建新的对象,消耗的时间最长,性能极差。
而 String Buffer和 String Builder每次追加字符串都是同一个对象,消耗的时间极短,性能良好。
而 String Buffer比 String builder消耗时间长一点点,这又是什么原因呢?别看急,继续往下看,
区别二:线程是否安全
· String:线程不安全 · String Buffer:线程安全 · String Builder:线程不安全
String Buffer和 String Builder的使用几乎完全相同,唯一的区别就是线程安全性不同。
正是因为 String Buffer是线程安全的(支持同步锁),所以性能比String Builder稍差一点。
可以看到 String Builder速度是最快的,但当在多线程中使用 String Builder的操作是不安全的,而但 String Buffer是可以正确操作的。
当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用 String Builder而不用String Buffer的。
总结:
1.如果要操作少量的数据使用 String。
2 多线程操作字符串缓冲区下操作大量数据使用 String Buffe。
3.单线程操作字符串缓冲区下操作大量数据使用 String Builde。
String、StringBuilder、StringBuffer 区别的更多相关文章
- String StringBuilder StringBuffer区别
String StringBuilder StringBuffer String类是final类,不可以被继承,且它的成员方法也是final方法,当一个字符串对象进行操作操作时,任何的改变不会影响到这 ...
- JAVA记录-String/StringBuilder/StringBuffer区别
- String, StringBuilder, StringBuffer问题
1. 区别 String为字符串常量,而StringBuilder和StringBuffer都是字符串变量,其中StringBuilder线程非安全,StringBuffer线程安全. 每次对 Str ...
- String,StringBuilder,StringBuffer的对比测试
public class TestString { private static final int COUNT = 10000000; public static void main(String ...
- JDK源码分析系列---String,StringBuilder,StringBuffer
JDK源码分析系列---String,StringBuilder,StringBuffer 1.String public final class String implements java.io. ...
- java中String StringBuilder StringBuffer比较和效率(性能)测试
string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...
- 深入源码剖析String,StringBuilder,StringBuffer
[String,StringBuffer,StringBulider] 深入源码剖析String,StringBuilder,StringBuffer [作者:高瑞林] [博客地址]http://ww ...
- difference among String,StringBuilder,StringBuffer
difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...
- String Stringbuilder Stringbuffer的区别
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- java中string stringbuilder stringbuffer 的区别
1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...
随机推荐
- Express路由
1. 路由器的配置分为两个,一个是需要做页面的渲染,一个是需要直接进行对数据进行输出,对于路由器的配置需要对路由器在公共的app.js进行注册与注入才能生效,否则是不能生效的.配置时根据不同的应用场景 ...
- ubuntu16.04上安装ros-kinetic
1.设置安装源 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" ...
- centos7部署.net core2.1
1.centos 7.0及以上服务器 2..NET SDK 安装 2.1 安装 https://www.microsoft.com/net/download/linux-package-manager ...
- css常见布局问题
1.如何实现一个盒子在页面中上下左右居中 方法一:(盒子宽高固定时) .box{ width:400px; height:200px; background:#000; position:absolu ...
- .yaml参数文件的编写和使用
一.在ROS底下使用.yaml文件配置参数 在ROS底下用起来还是非常方便的,首先,写一个读参数的函数getParam(),由于参数类型不止一种,所以要使用模板. 具体语句如下: template&l ...
- Android APK反编译(二)
参考:APK反编译 工具介绍 apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件) ...
- 基于JSP servlet mysql 的登陆页面
数据库中建表: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...
- Tornado框架配置使用Jinja2模板引擎
安装jinja2包 pip install jinja2 定义继承tornado.web.RequestHandler的子类BaseHandler.如果请求处理类继承这个类将会使用jinja模板引擎: ...
- 虚拟机安装及ubuntu-16.04.3-desktop-amd64.iso映像文件的安装
虚拟机安装及ubuntu-16.04.3-desktop-amd64.iso映像文件 搞了大半天才搞清楚装linux的前提是要先安装虚拟机的 先下载虚拟机,在然后创建虚拟机,在虚拟机里面再安装linu ...
- 《Dare To Dream》第六次作业:团队项目系统设计改进与详细设计
团队项目系统设计改进与详细设计 一.团队项目系统设计改进 任务1: a.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容. 初稿的不足:缺乏每个模块的具体业务流程详细设计和流程 ...