1. 程式人生 > 其它 >JAVA自學_面向物件04STRING

JAVA自學_面向物件04STRING

一、定義:

  String類定義的變數可以用於儲存字串,同時提供了許多操作字串的功能

  java.lang.String——所有“ ”的變數都可以認為是字串物件——常被稱為不可變字串型別,它的物件在建立後不能被更改 (以“ ”給出的字串物件,在字串常量池中儲存,在堆中;加法得到的新變數是由運算得到的,沒有存在字串常量池當中。)——故在字串常量值中的變數不可被更改——實際上物件存的是字串的地址

  

 

 

二、如何建立String物件(兩種方式)

  1 直接用“ ”即得到

  2 通過String類的構造器new建立物件

二者的區別:1是儲存在字串常量池中,相同內容只存一份(節省記憶體資源,出現多次的情況);每new一次都會產生一個新物件,放在堆記憶體中(故即使內容一樣,地址也不一樣)

三、常見面試題:

  

ps:JAVA存在編譯優化機制,程式在編譯的時候“a”+“b”+“c”會直接轉為“abc”;而如果其中有一個是變數名稱s2之類的形式,編譯階段無法對其進行判斷

四、常用功能:

  1字串內容比較功能:如果使用if判斷,==是比較前後的地址(因為你用的是String,要是int就比較值),使用者輸入的字串是普通的堆記憶體,而不是常量池;而equals只關心內容是否一樣,不關心地址

     public boolean equals(Object anObject)——將此字串與指定物件進行比較;例如,okname.equals(name)即呼叫了okname這個字串物件內的方法,去比較okname與傳進來的name內容是否一樣

     public boolean equalsIgnoreCase(String anotherString)——忽略大小寫比較(驗證碼)

  2遍歷,擷取,分割

     獲取字串長度:name.length();獲取某個索引位置的字元:name.charAt(n);把字串轉化為字元陣列:name.toCharArray();

     擷取某段內容——name.substring(m,n)包前不包後,截到n的前一位  ;或者從前直到尾巴(m)即可;敏感詞替換——name.replace("要替換的","替換後的內容"),原本字串常量池中的內容沒有被替換

     是否包含某些關鍵字——name.contains(“你要的關鍵字”)

;是否以某些關鍵字開始整個字串——name.startsWith("你要的關鍵字")

     按照某個內容(or傳入的規則,如幾個人名由逗號隔開)將字串分割成字串陣列返回——name.split(“,”)

具體案例——手機號碼中間位的遮蔽(使用擷取方法);驗證碼的生成(遍歷索引,隨機產生);登入系統的生成(使用equals內容判斷)