认识String类
1、为什么需要学习String
① 核心类,很常用!!!
② String 是Java中写好的一个类: 描述一个字符串(一串字符)
2、认识String :查看String类描述
- String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现【对象】。
a. 简单理解:”ABC” 一个具体的字符串就是一个String类的对象 - “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
- 拼接数字示例
- String/StringBuffer/StringBuilder的关系
① 这3个类没有直接或者间接的继承关系(不是直系亲属)
StringBuffer sb = “123”; 报错
② 都表示字符序列(简单理解为字符串)
CharSequence (字符序列的接口)
|— String
|----StringBuffer
|----StringBuilder
③ 区别
String : 它的对象一旦被创建那么值和长度就固定不变了
StringBuffer : 它的对象内容是可以被改变的;
是线程安全的
版本是1.0
StringBuilder : 它的对象内容是可以被改变的;
是线程不安全的
版本是 1.5
相当于StringBuffer效率更高一点 - StringBuffer/StringBuilder中的常用方法
① 这两个中的方法几乎是一样的;
② 上面3个都表示字符序列,因此有很多一样的方法(暂时就忽略)
③ 今天重点关注这两个中特有的方法: 更改对象中数据的方法
思考:哪些操作可能会改变对象中的数据?
插入、替换、删除、追加。。。
===============================================================
④ 构造方法:
- StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。 初始容量什么意思?
- StringBuilder(CharSequence seq) 构造一个字符串生成器,它包含与指定的 CharSequence 相同的字符。
new StringBuilder(“懂了吗?”)
new StringBuilder(new StringBuffer(“这下呢?”))
new StringBuilder(new StringBuilder(“。。。。”)) - StringBuilder(int capacity) 构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。
- 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) 返回一个副本,本身的对象没有被改变