80070583類不存在_011String類和包裝類
技術標籤:80070583類不存在
011-String類和包裝類
1.String類(1)特點(2)String常用方法(3)StringBuffer和StringBuilder2.包裝類(1)包裝類(2)自動裝箱和自動拆箱(3)日期類(4)數字類(5)Random(6)Enum
1.String類
(1)特點
String類是不可變類,也就是說String物件聲明後,將不可修改。(如果多個字串進行拼接,將會形成多個物件,這樣可能會造成記憶體溢位,會給垃圾回收帶來工作量。大量字串的拼接等操作,建議使用StringBuffer或者StringBuilder)
只要採用雙引號賦值字串,那麼編譯期將會放到方法區中的字串的常量池裡,如果是執行時對字串相加或相減會放到堆中(放之前會先驗證方法區中是否含有相同的字串常量,如果存在,把地址返回,如果不存在,先將字串常量放到池中,然後再返回該物件的地址)(JDK1.7 將字串常量池
String底層原始碼是final修飾的char型別的陣列
privatefinalcharvalue[];
-
Strings1="abc";
Strings2="abc";
Strings3=newString("abc");如果是採用雙引號引起來的字串常量,首先會到常量池中去查詢,如果存在就不再分配,如果不存在就分配,常量池中的資料時編譯期賦值的,也就是生成class檔案時就把它放到常量池裡了,所以s1和s2都指向常量池的同一個字串。
s3採用的是new的方式,在new的時候存在雙引號,所以他會到常量區中查詢“abc”,而常量池中存在“abc”,所以常量池中將不再放置字串,而new關鍵字會在堆中分配記憶體,所以堆中會建立一個物件abc,s3指向abc。
如果比較s2和s3的值必須採用equals,String已經對equals方法進行覆蓋。
Strings1=newString("abc");
Strings2=newString("abc");上述程式碼共建立了三個物件,2個是在堆區中,1個是在常量池中。
堆區中是執行期分配的,常量池中是編譯器分配的。
(2)String常用方法
valueOf:將其他型別轉換成字串
trim:去掉前部和尾部的空格
equals:字串相比較,不忽略大小寫
equalsIgnoreCase:字串相等比較,忽略大小寫
endsWith:判斷字串是否以指定的字尾結束
startWith:判斷字串是否以指定的字首開始
indexOf:取得指定字元在字串的位置
lastIndexOf:返回最後一次字串出現的位置
length:取得字串的長度
replaceAll:替換字串中指定的內容
split:根據指定的表示式拆分字串
substring:截子串
(3)StringBuffer和StringBuilder
StringBuffer:StringBuffer是可變物件,StringBuffer中所有的方法都是同步的,是執行緒安全的(方法是synchronized修飾的),但是速度慢,效率低,多執行緒環境下拼接等操作字元,建議使用StringBuffer。
StringBuffers=newStringBuffer();
s.append("a");
s.append("b").append("c");StringBuilder:用法與StringBuffer一樣,是非執行緒安全的,速度快,效率高,單執行緒環境下拼接等操作字串,建議使用StringBuilder。
2.包裝類
(1)包裝類
所有的包裝類都是final修飾的,所以不能建立其子類,包裝類都是不可變物件。
8種基本型別對應的包裝類:
基本型別 | 包裝型別 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
除了Boolean和Character外,其他的包裝類都有valueOf()和parseXXX方法,並且還有byteValue(),shortValue(),intValue(),longValue,floatValue(),doubleValue()方法。
inti1=1;
Integeri2=newInteger(i1);
doublei3=i2.doubleValue();
Strings="123";
inti4=Integer.parseInt(s);
Integeri5=newInteger(s);
Integeri6=Integer.valueOf(s);
(2)自動裝箱和自動拆箱
JDK5.0提供了自動裝箱和自動拆箱機制(Auto-boxing/unboxing)
自動裝箱:自動將基本資料型別轉換成包裝型別的物件
Integeri2=1;
自動拆箱:自動將包裝型別的物件轉換成基本資料型別
Integeri1=1;
inti2=i1;
(3)日期類
常用日期類:
java.util.Date
java.text.SimpleDateFormat
java.util.Calendar
Datetoday=newDate();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss")
System.out.println(sdf.format(today));
(4)數字類
java.text.DecimalFormat
java.math.BigDecimal(可精確計算,適用於財務資料)
(5)Random
Random位於java.util包下,可以產生隨機數。
Randomr=newRandom();
//生成0-100之間的整數隨機數
System.out.println(r.nextInt(100));
(6)Enum
使用列舉型別,能夠限定取值的範圍,能使程式在編譯時就會及早的發現錯誤,這樣程式會更加健壯。
enumResult{
SUCCESS,FAILURE
}