String、StringBuffer、StringBuilder比较
String、StringBuffer、StringBuilder三者是字符串中重要的内容,也是面试过程中经常问到的问题,下面就来总结一下三者的区别。
1.三者都可以存储和操作字符串。
2.String类提供了数值不可改变的字符串,即一旦定义的一个String对象,则不可以对其进行修改,要修改则是新创建了一个String对象。
- String str = "a"+"b"+"c";
进行上述操作,则底层操作如下:
- String s1 = "a";
- String s2 = "b";
- String s3 = "c";
- String str = s1+s2+s3;
总共创建了四个对象。创建新的对象,则需要消耗更多的资源。
3.StringBuffer和StringBuilder可以对字符串进行修改,如要修改字符串,则是在原串上进行操作,不用进行新对象的创建。
4.StringBuilder:线程非安全
StringBuffer:线程安全
5.由于以上原因,执行效率:StringBuiler>StringBuffer>String
下面进行代码演示,字符a连接10万个a,即进行10万次操作,可看出三者执行效率:
- public class Main {
- public static void main(String[] args) {
- String str = "a";
- long t1 = System.currentTimeMillis(); //获得的是自1970-1-01 00:00:00.000 到当前时刻的时间距离,单位为毫秒
for(int i=0;i<100000;i++){- str = str+'a';
- }
- long t2 = System.currentTimeMillis();
- System.out.println("String操作所用时间:"+(t2-t1));
- /*---------------------------------------*/
- StringBuffer sb = new StringBuffer("a");
- long t3 = System.currentTimeMillis();
- for(int i=0;i<100000;i++){
- sb.append('a');
- }
- long t4 = System.currentTimeMillis();
System.out.println("StringBuffer操作所用时间:"+(t4-t3)); //获取StringBuffer操作所用的时间- /*---------------------------------------*/
- StringBuilder sd = new StringBuilder("a");
- long t5 = System.currentTimeMillis();
- for(int i=0;i<100000;i++){
- sd.append('a');
- }
- long t6 = System.currentTimeMillis();
- System.out.println("StringBuilder操作所用时间:"+(t6-t5)); //获取StringBuilder操作所用的时间
- }
- }
运行结果如下:
可以看出,StringBuffer和Stringbuilder操作效率比String高得多,StringBuilder操作效率稍微大于StringBuffer。
综上,三者使用场景如下:
(1)如果要操作少量的数据用String,更为简洁方便
(2)单线程操作字符串缓冲区下操作大量数据使用StringBuilder
(3)多线程操作字符串缓冲区下操作大量数据使用StringBuffer
String、StringBuffer、StringBuilder比较的更多相关文章
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- String StringBuffer StringBuilder (转)
转自:http://www.iteye.com/topic/522167 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却 ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
- final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?
继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
随机推荐
- CF #Manthan, Codefest 16 C. Spy Syndrome 2 Trie
题目链接:http://codeforces.com/problemset/problem/633/C 大意就是给个字典和一个字符串,求一个用字典中的单词恰好构成字符串的匹配. 比赛的时候是用AC自动 ...
- 【原】Unity Shader VS UDK Material Editor
UDK 的材质编辑器十分好用,毕竟是所见即所得的.虽然unity也有类似第三方插件,但易用性还是差很多,下面主要是,把一些常见表达式概念对应起来. 1. UDK CameraVector (相机位向量 ...
- 【原创】bootstrap框架的学习 第五课
一.Bootstrap 中定义了所有的 HTML 标题(h1 到 h6)的样式. <!DOCTYPE html> <html> <head> <title&g ...
- hdu4185二分图匹配
Thanks to a certain "green" resources company, there is a new profitable industry of oil s ...
- 移动前端常用meta标签
移动前端常用meta标签 移动前端head常用meta标签 原文链接:http://caibaojian.com/mobile-meta.html //code from http://caibaoj ...
- linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决
以root用户登录 #vi /etc/sysconfig/network-scripts/ifcfg-eth0 #编辑配置文件,添加修改以下内容 BOOTPROTO=static #启用 ...
- 计算机的启动和Linux的启动
计算机的启动和Linux的启动 一 计算机的启动 计算机的启动过程分为四个阶段,分别是:BIOS.MBR.启动管理程序.加载操作系统内核.操作系统启动. 1.1 BIOS 计算机加电后,第一件 ...
- 通过Servlet实现汉字验证码
package com; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Gra ...
- 关于php调用.net的web service 踩过的坑
从前一阵开始,公司要和对方做web service对接.由于对方使用.net语言,而我方使用php.本来经理是要求我们也用.net写web service的服务端.而我上学时学的.net全忘了... ...
- 让人恼火的经历——手机H5网页被注入广告
你的网站是否在尾部出现了让人恼火的广告? 这次我算是遇到了这些流氓的广告.那么就让我们一步步攻克这些恼火的广告吧. 问题描述 某一天下午开始,我们制作的网站就开始被各种广告注入,类似上图这种. 还有在 ...