文章目錄
字符串
創建和存儲的機制
String 的實現採用了Flyweight 的設計模式
當執行 String = "abc"
時,在字符串常量池查找字符是否已經存在,
若不存在則創建這個字符串常量,並返回引用;
若存在則直接返回引用。
“==”、equals和hashCode有什麼區別
- “==” :比較兩個基本類型的數據或兩個引用變量(是否指向同一堆內存)是否相同
- equals是Object類提供的方法,默認方法與"=="效果一致,可重寫
- hashCode()也是Object類的方法,默認方法返回的是對象在內存的地址所轉換成的int值(堆內存)
- equals 與 hashCode方法必須同時重寫
String、StringBuffer、StringBuilder和StringTokenizer
- String類是不可變類,即每次修改都會創建新的對象,適合存放不頻繁修改的變量。
- StringBuffer類屬於可變類,適合需要頻繁修改字符串的場景。
- String字符串進行修改操作的原理:
- 首先用原來的字符串創建一個StringBuilder對象
- 再調用append( )方法
- 最後調用toString()方法返回字符串。
- StringBuffer是線程安全的,StringBuilder不是線程安全但單線程效率更高。
- StringTokenzier是用來分割字符串的工具類。
數組
數組有自己的屬性(如length),和方法(如clone),也可以用instanceof來判斷,因此從這方面看,數組也是對象。
- 聲明
type arrayName[ ] 或 type[ ] arrayName
type既可以是基本類型,也可以是類 - 初始化長度
arrayName = new type[arraySize]
arrayName = new type[ ] { e1, e2, e3 … } - 二維數組的聲明
type arrayName[ ][ ];
type [ ][ ] arrayName;
type[ ] arrayName[ ];
length屬性與length()方法
- length屬性是數組的屬性,存放數組的長度
- length( ) 方法是String的方法,來獲取字符串的長度