Java入门到精通——基础篇String StringBuffer StringBuilder性能PK

一、概述

字符串的处理在java中我们经常要用到java提供了三个类来提供对字符串的操作,String,StringBuffer,StringBuilder

String:固定长

StringBuffer:不固定长线程安全

Stringbuilder:不固定长线程不安全

二、性能PK

1.创建超大字符串。

代码:

	public class StringOne {

		public static void main(String[] args) {
			String str="";
			StringBuffer strb=new StringBuffer();
			StringBuilder strbd=new StringBuilder();

			long startString=System.currentTimeMillis();
			for (int i = 0; i < 100000; i++) {
				str=str+i;
			}
			System.out.println("String add Time:"+(System.currentTimeMillis()-startString));

			long startStringBuffer=System.currentTimeMillis();
			for (int i = 0; i < 100000; i++) {
				strb.append(i);
			}
			System.out.println("StringBuffer add Time:"+(System.currentTimeMillis()-startStringBuffer));

			long startStringBuilder=System.currentTimeMillis();
			for (int i = 0; i < 100000; i++) {
				strbd.append(i);
			}
			System.out.println("StringBuilder add Time:"+(System.currentTimeMillis()-startStringBuilder));
		}

	}
效果图:

2.字符串常量的添加操作

代码:

	public class StringTwo {

		public static void main(String[] args) {
			long startString=System.currentTimeMillis();
			for (int i = 0; i < 100000000; i++) {
				String str="String"+"and"+"String"+"append";
			}
			System.out.println("String  Time:"+(System.currentTimeMillis()-startString));

			long startStringBuffer=System.currentTimeMillis();
			for (int i = 0; i < 100000000; i++) {
				StringBuffer strb=new StringBuffer();
				strb.append("String");
				strb.append("and");
				strb.append("String");
				strb.append("append");
			}
			System.out.println("StringBuffer  Time:"+(System.currentTimeMillis()-startStringBuffer));

			long startStringBuilder=System.currentTimeMillis();
			for (int i = 0; i < 100000000; i++) {
				StringBuilder strbdr=new StringBuilder();
				strbdr.append("String");
				strbdr.append("and");
				strbdr.append("String");
				strbdr.append("append");
			}
			System.out.println("StringBuilder  Time:"+(System.currentTimeMillis()-startStringBuilder));
		}

	}
效果图:

三、总结

通过上述的性能对比得出结论在我们构建超大字符串的时候StringBuffer和StringBulder的表现比String的表现要好的很多不是一个数量级的而在字符串常量的添加操作中String的表现比StringBuffer和StringBuilder的表现好,原因就在于在创建String类的比创建StringBuffer和StringBuilder使用的开销小时间短,所以这三个类的用法各有千秋根据我们具体的业务去选择用哪一个类。

时间: 2024-08-04 01:21:03

Java入门到精通——基础篇String StringBuffer StringBuilder性能PK的相关文章

Java入门到精通——基础篇之static关键字

一.概述 static 关键字是声明静态变量,静态方法用的.static的含义是属于类且不属于类对象的变量和函数. 二.static的产生. 在创建对象的时候除非用new创建那个类的对象,否则实际上并没有获得任何对象只有当执行new来创建对象时数据存储空间才被分配,其方法才供外界调用.但是有两种情况上述方法时无法解决的 第一种只想为某特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至不需要创建任何对象. 第二种希望某个方法(变量)不予包含它的类的人很对象关联在一起.也就是没有创建对象,也能

Java入门到精通——基础篇之面向对象

一.概述. Java属于面向对象的一种语言,因为Java是面向对象的语言所以这个语言的诞生需要有五个基本特性: 1)万物皆为对象. 2)程序是对象的集合. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其他类型.每个对象都是某个类的一个实例. 5)某一特定类型的所有对象都可以接收同样的消息. Java中会有一些我们常用到的概念虽然总在用但是我们却不知道为什么会要有这些下面我就以一问一答的方式来给大家讲解. 二.一些面向对象的疑问. 2.1为什么要有访问控制的存在?它的意义是什

关于Java基础知识 String StringBuffer StringBuilder三者的区别

Java基础中String StringBuffer StringBuilder 以下介绍 相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder 不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用 StringBuffer:线程安全(

Java入门到精通——框架篇之Spring源码分析Spring两大核心类

一.Spring核心类概述. Spring里面有两个最核心的类这是Spring实现最重要的部分. 1.DefaultListableBeanFactory 这个类位于Beans项目下的org.springframework.beans.factory.support包下. XmlBeanFactory(位于org.springframework.beans.factory.xml包)继承自DefaultListableBeanFactory,而DefaultListableBeanFactory

Java入门到精通——框架篇之Hadoop概述

一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map-reduce的思想来计算Page Rank,通过不断的演变Google带给我们了GFS.Map-Reduce.Bigtable这三大的关键技术和思想.由于Google的这些技术没有开源代码.有个人就模仿Google实现了类似Google全文搜索功能的框架Lucene,它提供了全文检索引擎的架构,包

Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can&#39;t find referenced pointcut XXX

一.问题描述及原因. 利用Aspect注解实现AOP的时候出现了error at ::0 can't find referenced pointcut XXX.一看我以为注解写错了,结果通过查询相关资料是因为Spring2.5与中的aspectjweaver.jar 和aspectjrt.jar这两个jar包与JDK1.7不匹配. org.springframework.beans.factory.BeanCreationException: Error creating bean with n

重温java中的String,StringBuffer,StringBuilder类

任何一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的. String 类已在上一篇随笔 小瓜牛

风雨java路之【基础篇】——异常的那些事儿

异常,说白了,就是不正常,就是由于种种原因产生了非正常的结果.生活中此现象比比皆是,举个简单的例子: 去ATM机取钱,插入银行卡,没反应,这就是异常,可能是机器坏了,也可能是卡消磁了等等:读卡成功,输入密码时,铵错按钮,这也是异常:密码正确,想取¥1000,结果余额不足,这又是异常:钱取完了,卡被吞了,这还是异常:-- 拿人来说,沙尘迷眼了,这是异常情况:喝水呛着了,这也是异常:水指不小心划破流血了,这也是异常:-- 出现这些情况该怎么办?那就需要"异常机制",对于ATM机,他有自己的

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav