String,StringBuilder和StringBuffer
String是char[]+操作,由复制创建新对象进行操作,也就是char[]是不可变的,对象内容永不变。
StringBuilder是char[]+对此char[]数组的操作,处理当前数组不用复制重新创建,即char[]是可变的。
StringBuilder内部的char[]数组内容是可变的,如长度不够,可以利用边长算法进行维护,自动扩容长度。
StringBuffer和StringBuilder的API几乎一样,前者是由java早期提供,速度慢,线程安全,后者是java5以后提供的,速度快,非线程安全。
StringBuilder:
appent(),表示追加字符串;
insert(),表示插入字符串;
delete()表示删除;
1) StringBuilder 是变长字符序列
2) StringBuilder 方法: append, insert … 都返回当前 StringBuilder 对象本身的引用
3) 如果软件需要大量字符串处理时候建议使用 StringBuilder
4) String s = s1+s2; Java 实际上是如下代码运行:
String s=new StringBuilder(s1).append(s2).toString();
5) String s = s1+s2+s3+s4; 被优化为
String s = new StringBuilder(s1).append(s2).append(s3).append(s4).toString();
6) s += “a”;会产生两个新对象(StringBuilder, String)( 笔试题)
StringBuilder buf=new StringBuilder();
buf.append(“a”);
buf.append(“a”);
String API(字符串的常用方法)
字符串覆盖了 equals() hashCode() toString()
String 字符串中的字符是有序号的,从 0 开始
这些方法如果字符串有变化就返回新的 String 对象, 不变化就返回原字符串. 如: trim()
API 方法
charAt()
length()
trim():去掉字符串首尾的空格
toLowerCase()
toUpperCase()
indexOf() :返回String 对象内第一次出现子字符串的字符位置。
lastIndexOf():同上,但是是最后一次
endsWith():判断字符串s1是否从字符串sd开始
startsWith():判断字符串s1是否从字符串sd结尾
substring(int start, int end):截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str;
substring(int start):截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str;
toCharArray() 字符串和字符可以相互转换
String str = new String(new char[]{‘1’,’2’,’3’});
char[] chs = str.toCharArray();
Object类另外补充
toString()方法, 经常由系统默认调用,是活劢当前对象的文本描述
当直接打印一个对象是,默认调用该对象继承自Object类的toString()方法,我们可重写toString方法自定义输出。
equals()方法,默认比较规则是比较引用,即非引用同一对象就不相等,可重写此方法自定义。
hashCode() 方法
hashCode()方法要不 equals 方法一同覆盖( Sun 公司规定)
当两个对象 equals 比较为 true 时,应具有相同的 hashCode()值
当两个对象 equals 比较为 false 时,应具有丌相同的 hashCode()值
hashCode() 值要稳定(一致性),一个对象创建以后就丌应该再变化
默认的 hashCode()值是当前堆对象地址转换的一个整数,这个整数不是内存地址!
一般使用对象的 OID 值作为 hashCode 的值
OID 是对象的唯一编号,在项目中一般采用数据库生成 OID,也就是数据库中的“主键”
(String类已经覆盖了上面补充的方法)