1. 程式人生 > 實用技巧 >java第五天---String類和Date類

java第五天---String類和Date類

本章節講解常用類:String類和Date類

一、String類

  1、什麼是String類?

    String類是用來建立字串型別的,是引用資料型別。

  2、特點:

    ①字串不能改變

    ②因為不能改變,所以是可以共享的

    ③字串的效果相當於要給char[]陣列,但是實際上是byte[]位元組陣列

  3、建立方式

    第一種: String str="123"; //直接使用雙引號的就是字串物件

    第二種:通過構造方法:String str=new String("abc");

  4、常用方法(更多方法參考jdk8)

    charAt(index):返回指定下表處的字元

    indexOf(char):返回該字元第一次出現的下標

    concat(str,str1....):拼接字串,得到一個新的字串

    contains(char):判斷是否包含指定字元

    endWith(char):判斷是否以指定字元結尾

    startsWith(char):判斷是否以指定字元開頭

    subString(index):擷取從index開始到字串結尾的字串

    sunString(startIndex,endIndex):擷取開始到結束下邊之間的字串,前閉後開

    split(""):以指定字元為間隔分割字串為字元陣列

    trim():刪除字串開頭結尾處的空格,返回一個新的字串

    toString():返回此物件本身

    replace(old,new):使用新的字元替代字串中的舊的字元

    length():返回字串的長度

    join(連線符,obj....):使用指定連線符連線多個字串

  5、字串的比較

     字串的比較不使用 == ,使用equals(Object)或者equalsIgnoreCase(Object),equalsIgnoreCase()不區分  大小寫。

    為什麼不能使用 "=="?

      ①”==“在基本資料型別比較時,比較的是值。在比較引用資料型別時,比較的是記憶體地址

      ②equals()在底層依舊使用的”==“,不過在String類中對其進行了重寫,讓它能夠比較字串的值

   “==”和equals()從記憶體分析:

     在記憶體中的棧、堆、常來區中,棧用來存放變數名(引用),堆中用來存放建立的物件,常量中存放常量值。而字串不改變,就發生在常量  區。當String str1="123"載入時,str1 這個變數名就載入進棧,接著str1 到常量池去尋找 “123” 這個常量值,如果常量池沒有該常量,那麼就建立一   個,str1中存放 “123” 的地址。當String str2="123"載入時,str2載入進棧,然後也去常量池中尋找 “123” ,這是常量池中已經存在了該常量,就不再  建立,使用已經存在的這個常量得地址。這個就體現了String字串不變,可共享的特點。到 String str3=new String("123")時,str3這個變數名進棧,  new String()在堆裡建立,str3存放的是堆裡物件得地址,物件的初始化值會到常量池中尋找,如果常量池中存在,就引用已經存在的,不存的話,在  常量池中先建立。

  6、String的不足

    上邊我們提到了字串是不可變的,如果我們要在原來字串的基礎上去新增字串,就會開闢一個空間,將拼接好的字串放進去,拼接前的  字串還在記憶體中,新加的數量少還好,如果由大量的資料拼接,就會浪費大量的時間和記憶體。

    所以,java給了兩個新的類:StringBuffer和StringBuilder。這兩個類建立的字串都是可變的,拼接之類的就是再原來基礎上拼接,不會再生成一  個新的字串。這樣就節省了大量的空間和開闢空間的時間。StringBuffer是執行緒安全的,StringBuilder是執行緒不安全的。這兩個的類方法和String類一  樣。StringBuffer和StringBuilder拼接和插入使用append()和insert()。String拼接字串可以使用 + ,String無法插入。

二、Date類

   *Date類做什麼用?

    用來獲取當前本地的時間。

  *常見Date類物件?

    Date d=new Date();

  *通過Date類獲取的時間,其格式不適合我們進行閱讀,所以要進行格式化。

    格式化時用的類:SimpleDateFormat 該類中兩個方法:format()將時間格式轉為特定格式的字串。parse()將字串轉為日期格式

//將本地時間進行格式化,返回值為字串
Date date=new Date();
//構造方法裡邊設定想要格式成的樣式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format=sdf.format(date);
//將字串轉換為日期格式 ,要轉的字串格式要和構造方法中的規則樣式一樣,這樣才能夠解析
Date newDate=sdf.parse(format);

  *SimpleDateFormat類時jdk1.7之前提供的,jdk1.8之後提供的如下:

    獲取本地時間:

      ①LocalDateTime類,獲取本地的日期時間

      ②LocalDate類,獲取本地的日期

      ③LocalTime類,獲取本地的時間

      都是通過now()方法獲取本地時間,應為now()是靜態的,所以可以 類名.now()

    格式化使用的類:

      DateTimeFormatter

   格式化的過程和jdk1.7不同,看例子:  

 public static void main(String[] args) throws ParseException {
//        獲得當前的日期
        LocalDate now = LocalDate.now();
//        使用DateTimeFormatter類的ofPattern()設定格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        對日期進行格式化format()方法
        String format = now.format(dateTimeFormatter);
        System.out.println(format);

        //將字串轉換為日期格式
        String str="2020.03.12";
//        使用DateTimeFormatter類的ofPattern()設定格式。只有方法中的格式和字串的格式對應,parse()方法才能識別到那位是日期
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy.MM.dd");
//        此處的parse()方法由LocalDate類呼叫,而jdk1.7之前是由SimpleDateFormat類的物件呼叫
        LocalDate parse = LocalDate.parse(str, dateTimeFormatter1);
        System.out.println(parse);
    }