入门学习__认识String类

认识String类
1、为什么需要学习String
① 核心类,很常用!!!
② String 是Java中写好的一个类: 描述一个字符串(一串字符)
2、认识String :查看String类描述

  1. String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现【对象】。
    a. 简单理解:”ABC” 一个具体的字符串就是一个String类的对象
  2. “ABC”字符串是常量:值;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:String str = “abc”;
    a. 字符串常量在创建之后就不能更改了
    a) 字符串对象存在于堆中,存在了,字符串的值都不能改变了
    i. 分析:多个字符被解析放到字符串类中的一个私有字段private final char value[];
    ii. 字符串内部字符数组使用final修饰,并且是数组,数组长度固定,final修饰不能改变
    b. 字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享
    a) String str = “abc”;
    b) String st1 = str;//持有String 对象地址,共享String对象
    c) 什么是字符缓冲去:str 变量,存在于栈中就是缓冲区,所以应用类型数据持有地址可以变
    3、String对象的创建方式(目前介绍常见)
    ① String s = “skajh看哈师大”;
    ② 通过调用String类的构造方法【很多…】
    String()
    String(String str)
    …更多构造方法 ,以后再说(IO流的时候)

4、关于空字符串
① String str1 = null; 表示str1没有指向一个对象
② String str2 = “”; 有一个对象,对象是空
③ String str3 = new String(); 和②差不多
④实际应用中我们需要如何区分?
A. 理解到①表示没有对象
B. ②③有对象,但是是空的,其实也没有多大意思

5、字符串的比较/常量池
(1) 当使用String str = “A” ;的方式赋值,会将该字符串值【对象】放入到常量池
(2) 当再次使用String st1 = “A”的方式会先检查常量池是否有“A”值,
① 如果存在直接引用
② 如果不存在,会放入常量池
(3) 常量池与享元模式类型,但是区别,享元模式是已经缓存,但是常量池是在使用的时候缓存
(4) 字符串拼接
① 常量方式拼接,并直接使用赋值符号赋值,会检查常量池
② 变量方式拼接,不会检查常量池

最后记住一点: 引用数据类型如果向比较值,推荐使用equals
String类覆写了Object中的equals方法,比价的就是字符串的字面值
6、String中的常用方法
7、创建了几个对象–参看面试题 (对于实际开发没有一点意思)
8、小结:
5.2 StringBuffer/StringBuilder

  1. 拼接数字示例
  2. String/StringBuffer/StringBuilder的关系
    ① 这3个类没有直接或者间接的继承关系(不是直系亲属)
    StringBuffer sb = “123”; 报错
    ② 都表示字符序列(简单理解为字符串)
    CharSequence (字符序列的接口)
    |— String
    |----StringBuffer
    |----StringBuilder
    ③ 区别
    String : 它的对象一旦被创建那么值和长度就固定不变了
    StringBuffer : 它的对象内容是可以被改变的;
    是线程安全的
    版本是1.0
    StringBuilder : 它的对象内容是可以被改变的;
    是线程不安全的
    版本是 1.5
    相当于StringBuffer效率更高一点
  3. StringBuffer/StringBuilder中的常用方法
    ① 这两个中的方法几乎是一样的;
    ② 上面3个都表示字符序列,因此有很多一样的方法(暂时就忽略)
    ③ 今天重点关注这两个中特有的方法: 更改对象中数据的方法
    思考:哪些操作可能会改变对象中的数据?
    插入、替换、删除、追加。。。
    ===============================================================
    ④ 构造方法:
  1. StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。 初始容量什么意思?
  2. StringBuilder(CharSequence seq) 构造一个字符串生成器,它包含与指定的 CharSequence 相同的字符。
    new StringBuilder(“懂了吗?”)
    new StringBuilder(new StringBuffer(“这下呢?”))
    new StringBuilder(new StringBuilder(“。。。。”))
  3. StringBuilder(int capacity) 构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。
  4. StringBuilder(String str)
    ⑤ 常用在方法:
    StringBuilder append(…)
    StringBuilder delete(int start, int end)
    StringBuilder insert(插入点,插入的数据)
    StringBuilder replace(int start, int end, String str)
    StringBuilder reverse() 翻转
    String substring(int start) 返回一个副本,本身的对象没有被改变
    String substring(int start, int end) 返回一个副本,本身的对象没有被改变