String、StringBuilder、StringBuffer的区别
来源:互联网 发布:小米电视怎么样 知乎 编辑:程序博客网 时间:2024/06/08 07:28
三者的区别,简单来讲:
String: 字符串常量
StringBuffer: 字符串变量(线程安全)
StringBuilder: 字符串变量(非线程安全
1.String类型
从概念上讲,Java字符串就是Unicode字符串序列。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响。
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用。
一定不要用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上。
String greeting="Hello";if(greeting=="Hello"){ /*有可能为true**/}if(greeting.substring(0,3)=="Hel"){ /*有可能为false**/}/*所以对于空字符串的检测尽量使用equals()方法来比较**//*有时要检查一个字符串既不是null也不为空串,这时要使用以下条件:**/if(str != null && !str.equals(""))
在大部分情况下 StringBuffer > String
2.StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append(“le”) 会使字符串缓冲区包含“startle”,而 z.insert(4, “le”) 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer
3.StringBuilde
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
查看更多文章,请访问www.wangchuangshi.com
在此附上String API 以及StringBuilder API(StringBuffer API 与其基本相同)
String API
- 1.char charAt (int index)
返回给定位置的代码单元。除非对底层的代码单元感兴趣,否则不需要调用这个方法。
- 2.int codePointAt(int index) 5.0
返回从给定位置开始的码点。
- 3.int compareTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数;如果字符串位于other之后,返回一个正数;如果两个字符串相等,返回0。
- 4.boolean equals(Object other)
如果字符串与other相等,返回true。
- 5.boolean equalsIgnoreCase(String other)
如果字符串与other相等(忽略大小写),返回true。
- 6.boolean startsWith(String prefix)
- 7.boolean endsWith(String suffix);
如果字符串以suffix开头或结尾,则返回true。
- 8.int indexOf(String str)
- 9.int indexOf(String str,int fromIndex)
- 10.int indexOf(int cp)
- 11.int indexOf(int cp,int fromIndex)
返回与字符串str或代码点cp匹配的第一个子串的开始位置。这个位置从索引0或fromIndex开始计算。如果在原始串中不存在str,返回-1。
- **12.int length()
返回字符串的长度**
- 13.String replace(CharSequence oldString,CharSequence new String)
返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用String或StringBuffer对象作为CharSeqence参数。
- 14.String substring(int beginIndex)
- 15.String substring(int beginIndex,int endIndex)
返回一个新字符串。这个字符串用包含原始字符串中从beginIdex到串尾或endIndex-1的所有代码单元。
- 16.String toLowerCase()
- 17.String toUpperCase()
- 18.trim()
返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。
- 19.String join(CharSequence delimiter,CharSequence…elements) 8
返回一个新字符串,用给定的定界符连接所有元素。
以下是StringBuilder API
StringBuilder API
- **1.StringBuilder()
构造一个空的字符串构建器。**
- 2.int length()
返回构建器或缓冲器中的代码单元数量。
- **3.StringBuilder append(String str)
追加一个字符串并返回this。**
- 4.StringBuilder append(char c)
追加一个代码单元并返回this。
- 5.StringBuilder appendCodePoint(int cp)
追加一个代码点,并将其转换为一个或两个代码单元并返回this
- 6.void setCharAt(int i,char c)
将第i个代码单元设置为c。
- 7.StringBuilder inset(int offset,String str)
在offset位置插入一个字符串并返回this。
- 8.StringBuilder delete(int startIndex,int endIndex)
删除偏移量从startIndex到-endIndex-1的代码单元并返回this。
- **9.String toString()
返回一个与构建器或缓冲器内容相同的字符串。**
- String,StringBuffer,StringBuilder的区别
- String StringBuffer StringBuilder的区别
- String, StringBuffer, StringBuilder的区别?
- String,StringBuffer, StringBuilder 的区别
- String,StringBuffer,StringBuilder的区别
- String , StringBuffer, StringBuilder的区别
- String 、 StringBuffer 、StringBuilder 的区别
- String StringBuffer StringBuilder的区别
- String、StringBuffer、StringBuilder的区别
- String, StringBuffer, StringBuilder的区别
- String StringBuffer StringBuilder的区别
- string、stringbuffer、stringbuilder的区别
- String、StringBuffer 、StringBuilder 的区别
- String,StringBuffer,StringBuilder的区别
- String ,StringBuffer,StringBuilder的区别
- String,StringBuffer,StringBuilder的区别
- String StringBuffer StringBuilder的区别
- String,StringBuffer,StringBuilder的区别?
- C# 事件 订阅与发布
- RTMP与HLS压力测试工具安装与配置
- Java8系列之重新认识HashMap 2016/06/27 | 分类: 基础技术 | 9 条评论 | 标签: HashMap, java8 分享到: 67 原文出处: 前利 简介 Java为数
- git error 解决方案
- Mysql index使用事项
- String、StringBuilder、StringBuffer的区别
- hadoop namenode深度剖析
- JavaScript中append()和innerHTML的一点自己见解
- Struts 2 远程代码执行漏洞加固方法
- ant+jmeter接口测试
- cobol连接数据库
- camera2 opengl实现滤镜效果录制视频 四 录像
- Hdu 5782 Cycle(拓展KMP+Hash)
- 关于虚拟机与宿主机之间的网络连接问题