Java中String、StringBuilder和StringBuffer的区别

来源:互联网 发布:网名生成器软件下载 编辑:程序博客网 时间:2024/06/13 17:16
字符串的分类:
不可变的字符串(String):
当对象创建完毕之后,该对象内容(字符序列)是不可能改变的,如果内容改变就是一个新的对象。
可变的字符串(StringBuilder/StringBuffer):当对象创建完毕之后,该对象内容可以发生改变,当内容发生改变的时候,对象保持不变。

字符串本质(底层其实就是char[]),char表示一个字符,数组表示同一个类型的多个数据。
如何理解:String str = “ABC”; 等价于 char[] cs = new char[]{‘A’,’B’,’C’};

String对象的比较:
1) 单独使用””引号创建的字符串都是直接量,编译期就已经确定存储在常量池中;
2) 使用new String(“”)创建的字符串对象会存储在堆内存中,是运行期才创建;
3) 使用只包含直接量的字符串连接符,如”aa”+”bb”创建的也是直接量,编译期就已经存储在常量池中;
4) 使用包含String直接量(无final修饰符)的字符串表达式如”aa”+str1创建的对象是运行期才创建的,存储在堆中。

String类常用的API:更详细的请查看Java的API文档
1)String的创建和转换:
byte[] getbytes();   把字符串转换为byte数组
char[] toCharArray(); 把字符串转换为char数组
String(byte[] bytes); 把byte数组转换为字符串
String(char[] value); 把char数组转换为字符串

2)获取字符串信息:
int length();       返回此字符串长度
char charAt(int index);  返回指定索引处的char值
int indexOf(String str);  返回指定子字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str);  返回指定子字符串在此字符串中最右边出现处的索引

3)字符串比较判断:
boolean equals(Object anObject);  将此字符串与指定的对象比较
boolean equalsIgnoreCase(String anotherString);  将此String与另一个String比较,不考虑大小写
boolean contentEquals(CharSequence cs);  将此字符串与指定的CharSequence比较

4)字符串大小写转换:
String toUpperCase();  转换成大写
String toLowerCase();  转换成小写


 

String和StringBuilder以及StringBuffer的区别:
String类:
表示不可变的字符串,当前对象创建完毕之后,该对象的内容(字符序列)是不可能改变的,一旦内容改变就是一个新的对象。


总体:做拼接字符串,统统使用StringBuilder/StringBuffer,不要使用String。

StringBuilder和StringBuffer都表示可变的字符串,功能方法都是相同的


唯一区别:
StringBuffer:
StringBuffer中的方法都使用了syncharonized修饰符,表示同步的,线程安全,但是性能比较低;

StringBuilder:StringBuilder中方法都没有使用syncharonized修饰符,线程不安全,但是性能较高。


StringBuffer和StringBuilder的方法都一样的,只不过一个是线程安全,一个线程不安全。想要知道具体都有什么方法,就去查看JavaAPI文档。


一个有意思的面试题:

有两个字符串,一个字符串是“ABC”,另一个是“CBA”,现在要求写一段Java程序判断这两个字符串是不是倒叙?


调用这个方法,把两个字符串作为参数传过去,就能返回一个布尔值,来判断是否是倒叙!

阅读全文
0 0
原创粉丝点击