1. 程式人生 > 其它 >80070583類不存在_011String類和包裝類

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種基本型別對應的包裝類:

基本型別包裝型別
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

除了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
    }

b2deea5a36b2700a9a0ff4720d66bfec.png