java学习笔记之String,StringBuilder和StringBuffer

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类已经覆盖了上面补充的方法)

你可能感兴趣的:(学习笔记)