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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章