一、String
字符串是对象,null 表示string还没有new ,也就是说对象的引用还没有创建,也没有分配内存空间给他,而””、new String()则说明了已经new了,只不过内部为空,但是它创建了对象的引用,是需要分配内存空间的。
字符串使用
1、字符串比较
equals() ——判断内容是否相同。
compareTo() ——判断字符串的大小关系。
compareToIgnoreCase(String int) ——在比较时忽略字母大小写。
== ——判断内容与地址是否相同。
equalsIgnoreCase() ——忽略大小写的情况下判断内容是否相同。
reagionMatches() ——对字符串中的部分内容是否相同进行比较(详情请参考API)。
2、字符串查找
charAt(int index) ——返回指定索引index位置上的字符,索引范围从0开始。
indexOf(String str)——从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。
indexOf(String str,int fromIndex);——从字符串的第fromIndex个字符开始检索str。
lastIndexOf(String str)——查找最后一次出现的位置。
lastIndexOf(String str,int fromIndex)—-从字符串的第fromIndex个字符查找最后一次出现的位置。
starWith(String prefix,int toffset)—–测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
starWith(String prefix)——测试此字符串是否以指定的前缀开始。
endsWith(String suffix)——测试此字符串是否以指定的后缀结束。
3、字符串截取
public String subString(int beginIndex)——返回一个新的字符串,它是此字符串的一个子字符串。
public String subString(int beginIndex,int endIndex)——返回的字符串是从beginIndex开始到endIndex-1的串。
4、字符串替换
public String replace(char oldChar,char newChar)。
public String replace(CharSequence target,CharSequence replacement)——把原来的etarget子序列替换为replacement序列,返回新串。
public String replaceAll(String regex,String replacement)——用正则表达式实现对字符串的匹配。注意replaceAll第一个参数为正则表达式
二、StringBuffer
StringBuffer和String一样都是用来存储字符串的,只不过由于他们内部的实现方式不同,导致他们所使用的范围不同,对于StringBuffer而言,他在处理字符串时,若是对其进行修改操作,它并不会产生一个新的字符串对象,所以说在内存使用方面它是优于String的。
其实在使用方法,StringBuffer的许多方法和String类都差不多,所表示的功能几乎一模一样,只不过在修改时StringBuffer都是修改自身,而String类则是产生一个新的对象,这是他们之间最大的区别。
同时StringBuffer是不能使用=进行初始化的,它必须要产生StringBuffer实例,也就是说你必须通过它的构造方法进行初始化。
在StringBuffer的使用方面,它更加侧重于对字符串的变化,例如追加、修改、删除,相对应的方法:
1、append():追加指定内容到当前StringBuffer对象的末尾,类似于字符串的连接,这里StringBuffer对象的内容会发生改变。
2、insert:该类方法主要是在StringBuffer对象中插入内容。
3、delete:该类方法主要用于移除StringBuffer对象中的内容。
三、StringBuilder
StringBuilder也是一个可变的字符串对象,他与StringBuffer不同之处就在于它是线程不安全的,基于这点,它的速度一般都比StringBuffer快。与StringBuffer一样,StringBuider的主要操作也是append与insert方法。这两个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。
四、正确使用String、StringBuffer、StringBuilder
对于这三者使用的场景做如下概括:
1、String:在字符串不经常变化的场景中可以使用String类,如:常量的声明、少量的变量运算等。
2、StringBuffer:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装等。
3、StringBuilder:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,如SQL语句的拼装、JSON封装等