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類已經覆蓋了上面補充的方法)