Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类。做为基础知识是必须要理解的,这里做一些总结。

  A、区别

  可以从以下两个方面来理解

  1、不变和可变。

    String类:使用数组保存字符串,类中的定义如下:

            private final char value[];

    注意到,因为用了final修饰符,所以可以知道string对象是长度不可变的。

    StringBuilder和StringBuffer类:都是继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用动态的字符数组保存字符串,定义如下:

            char[] value

    注意到,未用到final修饰符,故可知这两种对象都是可变的。

  2、是否线程安全。

    String的对象是不可变的,因此它是线程安全的。

    StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以线程是安全的。如下代码所示:

 public synchronized StringBuffer reverse() {
super.reverse();
return this;
}

    StringBuilder对方法没有进行同步锁,所以是非线程安全的。

    注意:AbstractStringBuilder是StringBuilder和StringBuffer类的公共父类,它定义了一些字符串的基本操作的共同方法。

  B、共同点

  1、在多线程环境下,StringBuffer的效率要比StringBuilder低。

  2、抽象类AbstractStringBuilder是StringBuilder和StringBuffer类的公共父类。他们都调用父类的公共方法。如supper.append(...);

  

  C、属性方法和使用

  String的常用公共方法:

public int lenght()  返回字符串的长度。
public char charAt(int index)  返回字符串位置index处的字符。
public boolean equals(Object o)  比较两个字符串对象,相等则返回true;反之返回false。
public int compareTo(String s)  比较两个字符串字典顺序,相等返回0,s大于当前字符串返回一个负值,s小于当前串返回一个正值。
public boolean regionMatches(int toffset,String other,int ooffset,int len)  从当前字符串位置toffset开始寻找字符串other中起始位置为ooffset 长度为len 的子串。如发现匹配,返回true; 否则,返回false。
public boolean startsWith(String prefix)  从当前字符串的起始位置开始寻找字符串 prefix。如发现匹配,返回true;否则,返回false。
public boolean endsWith(String suffix)  如当前字符串的结尾子串与 suffix 匹配,返回true;否则,返回false。
public int indexOf(String str)  在当前字符串中寻找与str匹配的子串,返回首次匹配的起始下表值;无匹配返回-1。
public String substring(int beginIndex,int endIndex)  在当前字符串中,求从起始位置 beginIndex 到结束位置 endIndex 的子串。
public String concat(String str)  将当前字符串与str连接,返回连接后的字符串。
public String toLowerCase()  将当前字符串全转换为小写形式。
public String toUpperCase()  将当前字符串转换为大写形式。
public char toCharArray()  将当前字符串转换为字符数组。
public Static String valueOf(type variable)  把variable 转换为字符串,其中 type 表示 variable 的数据类型。

  字符串连接的方法:

 String a = "abc"
String b = "xkk"
b +=a;

StringBuffer的常用公共方法

    public int length() 返回缓冲区的字符数
    public int capacity() 返回缓冲区的容量大小,其值为:字符串长度+16。
    public synchronized StringBuffer append(type variable) 把variable转换为字符串,然后与当前字符串连接。
    public synchronized StringBuffer append(Char(char ch) 把字符ch连接到当前串尾。
    public synchronized StringBuffer insert(int offset,type variable) 把variable转换为字符串,然后插入到当前串中由offset指定的位置。
    public synchronized StringBuffer insert(int offset,char ch) 把字符 ch 插入到当前串由ofset指定的位置。
    public synchronized String toString() 把StringBuffer转换为字符串String。

  字符串连接方法  

 StringBuffer str= new StringBuffer("kkkxxx.");
str.append("xkk.");

StringBuilder的常用公共方法   

StringBuilder append(boolean b) 
          Appends the string representation of the boolean argument to the sequence.
 StringBuilder append(char c) 
          Appends the string representation of the char argument to this sequence.
 StringBuilder append(char[] str) 
          Appends the string representation of the char array argument to this sequence.
 StringBuilder append(char[] str, int offset, int len) 
          Appends the string representation of a subarray of the char array argument to this sequence.
 StringBuilder append(CharSequence s) 
          向此 Appendable 添加指定的字符序列。
 StringBuilder append(CharSequence s, int start, int end) 
          Appends a subsequence of the specified CharSequence to this sequence.
 StringBuilder append(double d) 
          Appends the string representation of the double argument to this sequence.
 StringBuilder append(float f) 
          Appends the string representation of the float argument to this sequence.
 StringBuilder append(int i) 
          Appends the string representation of the int argument to this sequence.
 StringBuilder append(long lng) 
          Appends the string representation of the long argument to this sequence.
 StringBuilder append(Object obj) 
          Appends the string representation of the Object argument.
 StringBuilder append(String str) 
          Appends the specified string to this character sequence.
 StringBuilder append(StringBuffer sb) 
          将指定的 StringBuffer 添加到此序列。
 StringBuilder appendCodePoint(int codePoint) 
          Appends the string representation of the codePoint argument to this sequence.
 int capacity() 
          Returns the current capacity.
 char charAt(int index) 
          Returns the char value in this sequence at the specified index.
 int codePointAt(int index) 
          Returns the character (Unicode code point) at the specified index.
 int codePointBefore(int index) 
          Returns the character (Unicode code point) before the specified index.
 int codePointCount(int beginIndex, int endIndex) 
          Returns the number of Unicode code points in the specified text range of this sequence.
 StringBuilder delete(int start, int end) 
          Removes the characters in a substring of this sequence.
 StringBuilder deleteCharAt(int index) 
          Removes the char at the specified position in this sequence.
 void ensureCapacity(int minimumCapacity) 
          Ensures that the capacity is at least equal to the specified minimum.
 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
          Characters are copied from this sequence into the destination character array dst.
 int indexOf(String str) 
          Returns the index within this string of the first occurrence of the specified substring.
 int indexOf(String str, int fromIndex) 
          Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
 StringBuilder insert(int offset, boolean b) 
          Inserts the string representation of the boolean argument into this sequence.
 StringBuilder insert(int offset, char c) 
          Inserts the string representation of the char argument into this sequence.
 StringBuilder insert(int offset, char[] str) 
          Inserts the string representation of the char array argument into this sequence.
 StringBuilder insert(int index, char[] str, int offset, int len) 
          Inserts the string representation of a subarray of the str array argument into this sequence.
 StringBuilder insert(int dstOffset, CharSequence s) 
          Inserts the specified CharSequence into this sequence.
 StringBuilder insert(int dstOffset, CharSequence s, int start, int end) 
          Inserts a subsequence of the specified CharSequence into this sequence.
 StringBuilder insert(int offset, double d) 
          Inserts the string representation of the double argument into this sequence.
 StringBuilder insert(int offset, float f) 
          Inserts the string representation of the float argument into this sequence.
 StringBuilder insert(int offset, int i) 
          Inserts the string representation of the second int argument into this sequence.
 StringBuilder insert(int offset, long l) 
          Inserts the string representation of the long argument into this sequence.
 StringBuilder insert(int offset, Object obj) 
          Inserts the string representation of the Object argument into this character sequence.
 StringBuilder insert(int offset, String str) 
          Inserts the string into this character sequence.
 int lastIndexOf(String str) 
          Returns the index within this string of the rightmost occurrence of the specified substring.
 int lastIndexOf(String str, int fromIndex) 
          Returns the index within this string of the last occurrence of the specified substring.
 int length() 
          Returns the length (character count).
 int offsetByCodePoints(int index, int codePointOffset) 
          Returns the index within this sequence that is offset from the given index by codePointOffset code points.
 StringBuilder replace(int start, int end, String str) 
          Replaces the characters in a substring of this sequence with characters in the specified String.
 StringBuilder reverse() 
          Causes this character sequence to be replaced by the reverse of the sequence.
 void setCharAt(int index, char ch) 
          The character at the specified index is set to ch.
 void setLength(int newLength) 
          Sets the length of the character sequence.
 CharSequence subSequence(int start, int end) 
          Returns a new character sequence that is a subsequence of this sequence.
 String substring(int start) 
          Returns a new String that contains a subsequence of characters currently contained in this character sequence.
 String substring(int start, int end) 
          Returns a new String that contains a subsequence of characters currently contained in this sequence.
 String toString() 
          Returns a string representing the data in this sequence.
 void trimToSize() 
          Attempts to reduce storage used for the character sequence.

  字符串连接方法  

 StringBuilder sb2 = new StringBuilder();
sb2.append( "xxxkkk" );

  D、参考资料

  1、http://www.cnblogs.com/xudong-bupt/p/3961159.html(java中String、StringBuffer、StringBuilder的区别)

  2、http://www.apihome.cn/api/java/StringBuilder.html(StringBuilder(示例,出错代码))

  3、http://blog.csdn.net/zhzhl29290029/article/details/12339981(黑马程序--JAVA字符串String、StringBuffer、StringBuilder、基本数据类型包装)

Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用的更多相关文章

  1. 在JAVA中,String,Stringbuffer,StringBuilder 的区别

    首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String ...

  2. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  3. java中的String,StringBuffrer,Stringbuilder的区别

    简单描述下 效率:StringBuilder>StringBuffer>String 使用场景: 如果要操作少量的数据用 = String 单线程操作字符串缓冲区 下操作大量数据 = St ...

  4. [置顶] String StringBuffer StringBuilder的区别剖析

    这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...

  5. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

  6. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

  7. Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?

    Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系 创建成功的String对象,其长度是固定的,内容 ...

  8. Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  9. Java中的String,StringBuilder,StringBuffer三者的区别(转载)

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

随机推荐

  1. Thinkphp的自定义路由(route.php)

    废话:因为thinkphp的默认路由会导致URL特别长,从而会影响搜索引擎优化.所以就衍生了自定义路由,尽量将URL缩短. 这是默认的路由文件: <?php return [ '__patter ...

  2. 42、和为S的两个数字

    一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.解法 import java.util.ArrayLis ...

  3. 75.VS2013和opencv3.1.0开发环境配置

    首先要做的就是 开发环境配置,具体过程如下: Step 1:OpenCV环境变量配置 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量 ...

  4. 008 BlockingQueue理解

    原文https://www.cnblogs.com/WangHaiMing/p/8798709.html 本篇将详细介绍BlockingQueue,以下是涉及的主要内容: BlockingQueue的 ...

  5. hdu 4347 The Closest M Points (kd树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4347 题意: 求k维空间中离所给点最近的m个点,并按顺序输出  . 解法: kd树模板题 . 不懂kd树的可以先看看这个 . 不多说, ...

  6. MemCached缓存操作

    Web项目在运行时,通常需要从数据库中进行读写.随着操作数据量的增大,以及访问量的集中,数据库的负载增加,数据库响应变慢,网站访问速度变慢的情况.Memcached就是用来解决这些问题的. Memca ...

  7. lr中用strtok函数分割字符串

    需要在loadrunner里面获得“15”(下面红色高亮的部分),并做成关联参数. ,6,5,0,4,0,3,0,3,2,0,0,0,1 用web_reg_save_param取出“8,7,5,15, ...

  8. 第七章:Mapping插件

    Mapping插件 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些属性是observable的,你可以使用KO绑定他们到你的UI元 ...

  9. openstack架构设计(一)

    下图描述了最常见的Openstack集成服务和各服务之间如何交互的逻辑架构. 一. 计算架构 当设计和构建计算结点时,需要考虑处理器,内存.网络.和存储资源等信息.它也是openstack的核心部分. ...

  10. poj1011 Sticks(DFS+剪枝)

    题目链接 http://poj.org/problem?id=1011 题意 输入n根棍子的长度,将这n根棍子组合成若干根长度相同的棍子,求组合后的棍子的最小长度.这题是poj2362的加强版,思路与 ...