Java字符串

首先看一下以下三篇文章,作者写的很不错:

String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)

StringBuilder 详解 (String系列之2)

StringBuffer 详解 (String系列之3)

以下是总结:

CharSequence,String,StringBuilder和StringBuffer的关系

  • CharSequence是一个接口,它只包括length(), charAt(int index), subSequence(int start, int end)这几个API接口。

public class Main {
    public static void main(String[] args) {
        CharSequence cs = "hello world!";
        print(cs.length()); // 12
        print(((String) cs).substring(1,2)); //e
        print(cs.charAt(2)); //l
    }
    public static void print(Object obj) {
        System.out.println(obj);
    }
}

示例

public class Main {
    public static void main(String[] args) {

        System.out.println("-------------------------------- testCharSequence -----------------------------");

        // 1. CharSequence的子类String
        String str = "abcdefghijklmnopqrstuvwxyz";
        System.out.println("1. String");
        System.out.printf("   %-30s=%d\n", "str.length()", str.length());
        System.out.printf("   %-30s=%c\n", "str.charAt(5)", str.charAt(5));
        String substr = (String)str.subSequence(0,5);
        System.out.printf("   %-30s=%s\n", "str.subSequence(0,5)", substr.toString());

        // 2. CharSequence的子类StringBuilder
        StringBuilder strbuilder = new StringBuilder("abcdefghijklmnopqrstuvwxyz");
        System.out.println("2. StringBuilder");
        System.out.printf("   %-30s=%d\n", "strbuilder.length()", strbuilder.length());
        System.out.printf("   %-30s=%c\n", "strbuilder.charAt(5)", strbuilder.charAt(5));
        // 注意:strbuilder的subSequence()返回的是,实际上是一个CharSequence 类型!
        String substrbuilder = (String)strbuilder.subSequence(0,5);
        System.out.printf("   %-30s=%s\n", "strbuilder.subSequence(0,5)", substrbuilder.toString());

        // 3. CharSequence的子类StringBuffer
        StringBuffer strbuffer = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
        System.out.println("3. StringBuffer");
        System.out.printf("   %-30s=%d\n", "strbuffer.length()", strbuffer.length());
        System.out.printf("   %-30s=%c\n", "strbuffer.charAt(5)", strbuffer.charAt(5));
        // 注意:StringBuffer的subSequence()返回的是,实际上是一个CharSequence 类型!
        String substrbuffer = (String)strbuffer.subSequence(0,5);
        System.out.printf("   %-30s=%s\n", "strbuffer.subSequence(0,5)", substrbuffer.toString());

        System.out.println();

    }
}

结果:

-------------------------------- testCharSequence -----------------------------
1. String
   str.length()                  =26
   str.charAt(5)                 =f
   str.subSequence(0,5)          =abcde
2. StringBuilder
   strbuilder.length()           =26
   strbuilder.charAt(5)          =f
   strbuilder.subSequence(0,5)   =abcde
3. StringBuffer
   strbuffer.length()            =26
   strbuffer.charAt(5)           =f
   strbuffer.subSequence(0,5)    =abcde

Last updated

Was this helpful?