- 一个题引入:
- String str1="a";
- String str2="b";
- String str3="a"+"b";
- String str4=str1+str2;
- 理解说明:str3 对象创建,编译初始化时,变量的初始值存放在常量池(或称之为直接数)中,题中 常量池中放入,“a”,"b","ab" 三个字符串
- str4 str1 和str2均为引用变量,str4为String类型+String类型 其底部是将Str转化为StringBulider类型的null值, 然后通过append()方法修改字符串,添加上了str1,str2(String类型的运算符重载)
- String类
- 1. String类是一个不可变类,一个String对象所包含的字符串内容永远不会被改变。
- 不可变类(immutable):创建了类的实例后,不允许修改其的属性。
- 举例:包装类,String类;
- 详情了解,不可变类与可变类
- 2. 构造器方法
- String()
- String(String value)
- String(char[] value)
- String(byte[] bytes)
- String(byte[] bytes, String charsetName) 指定编码格式的字节组
- 3. 常用方法
- length() 返回长度
- char charAt(int index) 返回index位置的字符
- equals(Object obj) 判断内容是否相同
- equalsIgnoreCase(Object obj) 判断内容是否相同,忽略大小写
- int compareTo(String str) 按照字典次序比较两个字符串的大小,大 返回一个大于0数值,=返回0 小返回小于0的数值、
- indexOf() ,lastindexOf() 返回第一次出现位置(last则从末尾开始查询)
- concat(String str) 连接字符串
- substring(int begin) substring(int begin,int end) 返回子字符串
- String[] split(String regex) 根据regex字符串分割
- replace(String regex,String replacement) 替换字符串
- replaceFirst(String regex,String replacement) 替换字符串,只替换首个
- trim() 删除收尾空格
- String valueOf(基本数据类型 参数名) 把基本类型转换为String类型
- toUpperCase() 转为大写
- toLowerCase() 转为小写
- StringBuffer类 可变类 表示字符串缓存
- 构造方法:
- StringBuffer()
- StringBuffer(int length) 长度为length的空缓冲区
- StringBuffer(String str) 16个字符的初始容量。
- 常用方法:
- length() 返回长度
- append()向缓冲区中添加新的字符串
- charAt(int index) 返回index位置的字符
- setCharAt(int index,char ch)替换
- getChars(int begin,int end,char[] dst,int dstBegin) 获取一段,与String的方法类似
- subString()截取
- insert(int offset,String str) 插入
StringBuilder
构造方法
与StringBuffer类似,不具体概述,初始容量同为16
常用方法 与StringBuffer类似
append(数据类型,参数名)
二者区别:
相同点:
1.同为用来处理字符串
2.length(),toString(),charAt(),subString()方法,功能相同
3.字符索引从0开始
不同点:
1.String类 不可变类,内容不可修改,而诸多修改方法只是在创建新的字符串。
StringBuffer可变类 ,内容可以修改,诸多方法是在修改内容。
2.String类 重写了Object类的equals方法
StringBuffer 没有重写
3.String和StringBuffer都重写了Object的toString()方法,String返回实例本身,StringBuffer返回一个内容相同的String对象的引用。
4.String对象可以用操作符“+”连接。
运行速度:StringBuilder > StringBuffer > String
安全性:StringBuilder是线程不安全的,而StringBuffer是线程安全的