String与StringBuffer以及StringBuilder的异同点

来源:互联网 发布:c 遍历二维数组 编辑:程序博客网 时间:2024/05/16 07:49

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。
1.String
String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的,也就可以理解为常量,显然线程安全。

 private final char value[];

通过api可以知道,他的常用方法有。

1.length() 获取字符串的长度2.charAt(index) 截取索引为index的一个字符3.getChars(start,end,[],,char target[],int targetStart) 截取多个字符转化为新的数组。4.toCharArray()5.getBytes()6.equals()和equalsIgnoreCase() 比较两个字符串7.regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars) 比较两个字符串的特定区域,并确定是否忽略大小写。8.startsWith()和endsWith()  startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束。9.equals()和==。equals用于比较字符串是否相同。==用于判断是否为同一个字符串10.indexOf() 查找字符或者子串第一次出现的地方11.lastIndexOf() 查找字符或者子串是后一次出现的地方。12. substring(int startIndex,int endIndex);后者可缺省,用于截取字符串。13. replace(char original,char replacement),replaceAll(char original,char replacement),字符串替换14. trim() 去掉起始和结尾的空格15. valueOf() 转换为字符串16.  insert(int index,String str)插入字符串

2.StringBuffer
StringBuffer可以认为是线程安全的字符串变量。如果你打开StringBuffer的源码看一看就会发现他的所有方法都是这个样子的。
这里写图片描述
是的,synchronized关键字。这意味着什么呢。对于线程来说这个关键字的作用就是让该方法在线程里面排队进行。而改类所有方法都有该关键字修。说明当有一个方法在线程内运行。其他线程就不能调用他的所有方法。因此线程安全。
再来看看他的构造方法吧

    public StringBuffer(String str) {        super(str.length() + 16);        append(str);    }
原创粉丝点击