java笔记
  • Java语言概述
  • 入门
    • ubuntu安装
    • window配置环境变量
    • 编写HelloWorld
    • 注释
    • 编程风格
    • 进制与字符编码
    • 键盘录入
  • java基础
    • 数据类型
    • 运算符与类型转换
    • 控制语句
      • 选择结构(if-else/swtich)
      • 循环结构(while/do-while/for)
    • 数组
      • 数组基础
      • 数组进阶
    • 面向对象
      • 基础
        • 面向过程和面向对象
        • 类与对象
        • 构造方法
        • 垃圾回收机制garbage collection
        • 关键字
      • 进阶
        • 封装
        • 继承
        • 多态
        • 抽象
        • 内部类
      • 高级特性
        • String类
        • 枚举
        • 注解
    • 异常
    • 常用类
      • 包装类
      • String相关类
      • 时间类
      • 数学类
      • File类
      • 枚举类
    • 单个字符操作(Character 类)
    • Java字符串
      • String
      • StringBuilder
      • StringBuffer
    • Java集合
    • Java 泛型
    • Java解惑
  • 附录:git
  • 附录:转义字符
  • maven
    • pom.xml
    • maven安装
  • 其他
    • BeanUtils
  • java与php语法对比
  • idea
  • 开发记录
  • ExecutorService 异步线程池
Powered by GitBook
On this page
  • 以下是总结:
  • 示例

Was this helpful?

  1. java基础

Java字符串

Previous单个字符操作(Character 类)NextString

Last updated 6 years ago

Was this helpful?

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

以下是总结:

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);
    }
}
  • CharSequence就是字符序列,String, StringBuilder和StringBuffer本质上都是通过字符数组实现的!

示例

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

和都是可变的字符序列。它们都继承于,实现了CharSequence接口。

但是,StringBuilder是非线程安全的,而StringBuffer是线程安全的。()

StringBuilder
StringBuffer
AbstractStringBuilder
java什么叫线程安全?什么叫不安全?
String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
StringBuilder 详解 (String系列之2)
StringBuffer 详解 (String系列之3)