String、StringBuffer和StringBuilder

来源:互联网 发布:python 访问局域网 编辑:程序博客网 时间:2024/06/08 15:06

String

String:代表不可变的字符序列,是一个终态类,不能被继承。字符串是常量,声明之后不能改变其值。
在对String类型的对象进行操作时,比如使用“+”对字符串拼接,是会产生新的对象。这就会对字符串的操作效率大大降低。当需要频繁修改字符串时,不建议用String类。
对字符串比较时,不建议使用“==”,而是用equals()方法。

StringBuffer

是可变的字符序列,是线程安全的,同步的。它在对字符串进行操作时,使用的是append()方法,在字符串的后面追加字符串,但是不产生新的对象。这样对字符串操作的效率较高。在Java中如果对字符串进行大量的操作,建议使用 StringBuffer。

StringBuilder

:是可变的字符序列,不是线程安全的,不同步。它与StringBuffer类似,但是不是线程安全的,效率很高,用在字符串缓冲区被单个线程使用的时候,建议优先采用该类。将 StringBuilder 的实例用于多线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

示例

String s0 = “hello”;

String s1 = new String(”hello”);

String s2 = new String(”hello”);

String s3 = “hel”;

String s4 = “lo”;

String s5 = s3+s4;

String s6 = “hel”;

String s7 = “hel”+”lo”;

System.out.println(s1 == s2);//false,指向的不是同一个对象。

System.out.println(s3 == s6);//true

System.out.println(s1 == s5);//false s5产生的是一个新的对象。

System.out.println(s0 == s7);//true s7这个再编译的时候,编译器会自动优化代码,实际上s7=”hello”, s5则不会优化,因为编译器毕竟还没智能到优化两个变量合成一个。

首先说明Java中使用(==)来比较,对于基本数据类型比较的是其变量的值,对于引用数据类型比较的是变量的引用地址。上面的示例,s1和s2这是两个不同的实例,分别指向不同的内存地址,所以直接使用 == 来比较,返回的是false,如果用equals自然返回的是true。String s1 = new String(”hello”); 在运行时涉及到了两个String实例,一个是常量池中”hello”,一个是new String(“hello”)创建出来的实例。

String 类中常用的方法

  1. intcompareTo(String value): 指定者:接口 Comparable 按字典顺序比较两个字符串。如果两个字符串相等,则返回 0;如果字符串在参数值之前,则返回值小于 0;如果字符串在参数值之后,则返回值大于 0
  2. public int length(),字符串的长度
  3. public char charAt(int index),返回一个在字符串中索引是index的char类型的字符。此方法可以将一个字符串转换成char类型的数组。同时,也可以使用new String(char[] ch)将char类型的数组,在String声明时转换成一个字符串。
  4. boolean startsWith(Stringvalue) 检查一个字符串是否以参数字符串开始。
  5. booleanendsWith(String value)检查一个字符串是否以参数个字符串结束。
  6. public int indexOf(int ch):返回指定字符ch在此字符串中第一次出现处的索引值;如果未出现该字符,则返回 -1。
  7. public int indexOf(int ch, int fromIndex): fromIndex - 开始搜索的索引
    public int lastIndexOf(intch) 返回最后一次出现的指定字符在此字符串中的索引值;如果未出现该字符,则返回 -1。
  8. public int lastIndexOf(Stringstr) 返回最后一次出现的指定子字符串str在此字符串中的索引值;如果未出现该字符串,则返回 -1。
  9. public String substring(intindex)提取从位置索引index开始直到此字符串末尾的这部分子字符串
  10. public String substring(intbeginIndex, int endIndex)提取从 beginindex开始直到 endindex(不包括此位置)之间的这部分字符串
  11. public String concat(Stringstr): 将指定字符str串联接到此字符串的结尾成为一个新字符串返回。
  12. public String replace(charoldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。
  13. public String trim() 返回字符串的副本,忽略前导空白和尾部空白
  14. public String toUpperCase(); 将此字符串中的所有字符都转换为大写
  15. public String toLowerCase(); 将此字符串中的所有字符都转换为小写
  16. public int length()获得此字符串的长度

StringBuffer:常用的方法

  1. StringBuffer append(Stringstr):将指定的字符串追加到此字符序列。
  2. StringBuffer insert(intoffset, String str) 将字符串str插入此字符序列指定位置中。
  3. int length( ):确定 StringBuffer 对象的长度
  4. void setCharAt(int pos, charch) 使用 ch 指定的新值设置 pos指定的位置上的字符
  5. String toString( )转换为字符串形式
  6. StringBuffer reverse() 反转字符串
  7. StringBuffer delete(intstart, int end) 此方法将删除调用对象中从start 位置开始直到 end 指定的索引– 1 位置的字符序列
  8. StringBuffer deleteCharAt(intpos) 此方法将删除 pos 指定的索引处的字符
  9. StringBuffer replace(intstart, int end, String s):此方法使用一组字符替换另一组字符。将用替换字符串从 start 指定的位置开始替换,直到end 指定的位置结束
  10. StringBuilder的用法和StringBuffer的用法是一致的。了解更详细的请看官方文档,或者在线查看http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Java API 文档
原创粉丝点击