一.引言
很多人觉得C/C++难,Java则相对简单,其中有一个原因就是,C/C++处理字符串那真的是会让很多人头疼,比如在C/C++中对字符串的初始化定义为:
char str[10] = "java";
char *str = "java";
char str[10]={
'j','a','v','a','\0'};
一看到数组、指针,就让很多人犯愁了。而又例如字符串的拼接,在C/C++中是通过strcat(str1,str2)实现的,但是使用这个方法,必须得清楚知道str1拥有足够的空间容纳str2,否则会造成不能完整将str2拼接到str1上。总之,挺麻烦的,不是?而Java则对字符串相关的处理方法进行了很高级的封装,Java使用者也能很轻松地对字符串进行一系列操作,相比于C/C++,简直是如鱼得水。
当然,本人在此并不是比较C/C++和Java谁好谁不好。本篇文章主要讲讲Java中涉及到字符串的String类和StringBuilder类。
二.String类
1.String类的定义
如下代码所示:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
//其他成员变量和方法
}
第一,可以注意到final修饰符,说明String类不能被继承。
第二,成员变量char value[]用于存储字符串中的每一个字符。
2.String对象的只读特性
String对象是不可变的,具有只读特性。
这句话看似无关痛痒,其实在实际的工程项目中,这一特性对性能必然有很大的影响,只是在大多数的开发过程中,我们并不在意。
那如何说明String对象的只读特性呢?又如何说明这一特性对性能的影响呢?我们One by one的回答。
2.1证明只读特性
在《Thinking in Java》第13章《字符串》中,作者举例说明:
package String;
public class Immutable {
public static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = "howdy";
System.out.println(q);
String qq