深入了解Java核心類庫--String類
一、 簡介
零碎知識點(diǎn)
- extends Object
- implements serializable,Comparable< String >,charSequence
- String類表示字符串,所有字符串文字都是此類的對象
- 字符串是不變的,值在創(chuàng)建后無法更改
- 對象一旦聲明則不可改變,改變的只是地址,原來的字符串還是存在的,并且產(chǎn)生垃圾
- 任何一個“”都為字符串對象,無賦值則為匿名對象
- 用“+”拼接字符串盡量避免,一般用append+toString
- StringBuilder(線程不安全)和StringBuffer(線程安全),忽略線程安全,其它都一樣
由于String對象是不可變的,所以可以共享(即兩個字符串一樣則共享同一塊內(nèi)存地址)
//共享 String t1 = "123"; String t2 = "123"; System.out.ptintln(t1 == t2);//true,(== 比較的是內(nèi)存地址)
字符串常量池
存在于方法區(qū)(加載代碼的內(nèi)存區(qū)),被所有的線程共享
堆在邏輯上的劃分
堆在邏輯上被分為三部分:
新生代:存儲剛創(chuàng)建的對象(GC詢問次數(shù)最多為15次,>15則進(jìn)入老年代)
老年代:垃圾回收次數(shù)超過15次(即15次之后依然存活的對象)
永久代:靜態(tài)修飾的所有東西(類、方法、常量…)
每一個字符串對象的創(chuàng)建都會放入永久代(每次創(chuàng)建都先去永久代,前提:不用new,new開辟新內(nèi)存)
二、 創(chuàng)建對象
2.1.1 直接引用常量區(qū)
String s = " ";
String str = “abc” ;
2.1.2 使用構(gòu)造方法
String()
String str = new String(“abc”);
2.1.3 兩種實(shí)例化方法的區(qū)別
區(qū)別
直接賦值:
只開辟一塊堆內(nèi)存空間,并且會自動入池,不會產(chǎn)生垃圾會將匿名對象“”放入對象池,下一次不同對象直接賦值時直接利用池中已經(jīng)存在的匿名對象
構(gòu)造方法:
在堆內(nèi)存創(chuàng)建對象會開辟兩塊堆內(nèi)存空間,其中一塊堆內(nèi)存會變成垃圾被系統(tǒng)回收,而且不能夠自動入池,需要通過public String intern();方法進(jìn)行手工入池。
三、常用方法
Modifier and Type | Method | Description |
---|---|---|
char | charAt(int index) | 返回指定索引處的 char值。 |
int | compareTo(String anotherString) | 按字典順序比較兩個字符串。 |
boolean | endsWith(String suffix) | 測試此字符串是否以指定的后綴結(jié)尾。 |
boolean | equals(Object anObject) | 將此字符串與指定的對象進(jìn)行比較。 |
boolean | equalsIgnoreCase(String anotherString) | 將此 String與另一個 String比較,忽略了大小寫。 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 將此字符串中的字符復(fù)制到目標(biāo)字符數(shù)組中。 |
int | indexOf(int ch) | 返回指定字符第一次出現(xiàn)的字符串中的索引。 |
int | indexOf(int ch, int fromIndex) | 返回指定字符第一次出現(xiàn)的此字符串中的索引,從指定索引處開始搜索。 |
int | indexOf(String str) | 返回指定子字符串第一次出現(xiàn)的字符串中的索引。 |
int | indexOf(String str, int fromIndex) | 從指定的索引處開始,返回指定子字符串第一次出現(xiàn)的字符串中的索引。 |
boolean | isEmpty() | 返回 true ,當(dāng)且僅當(dāng), length()是 0 。 |
int | lastIndexOf(int ch) | 返回指定字符最后一次出現(xiàn)的字符串中的索引。 |
int | lastIndexOf(int ch, int fromIndex) | 返回指定字符最后一次出現(xiàn)的字符串中的索引,從指定的索引開始向后搜索。 |
int | lastIndexOf(String str) | 返回指定子字符串最后一次出現(xiàn)的字符串中的索引。 |
int | lastIndexOf(String str, int fromIndex) | 返回指定子字符串最后一次出現(xiàn)的字符串中的索引,從指定索引開始向后搜索。 |
int | length() | 返回此字符串的長度。 |
String | repeat(int count) | 返回一個字符串,其值為此字符串的串聯(lián)重復(fù) count次。 |
String | replace(CharSequence target, CharSequence replacement) | 將此字符串中與文字目標(biāo)序列匹配的每個子字符串替換為指定的文字替換序列。 |
String | replaceAll(String regex, String replacement) | 將給定替換的給定 regular expression匹配的此字符串的每個子字符串替換。 |
String | replaceFirst(String regex, String replacement) | 將給定替換的給定 regular expression匹配的此字符串的第一個子字符串替換。 |
boolean | startsWith(String prefix) | 測試此字符串是否以指定的前綴開頭。 |
boolean | startsWith(String prefix, int toffset) | 測試從指定索引開始的此字符串的子字符串是否以指定的前綴開頭。 |
String | stripLeading() | 返回一個字符串,其值為此字符串,并刪除了所有前導(dǎo) white space 。 |
String | stripTrailing() | 返回一個字符串,其值為此字符串,并刪除所有尾隨 white space 。 |
CharSequence | subSequence(int beginIndex, int endIndex) | 返回作為此序列的子序列的字符序列。 |
String | substring(int beginIndex) | 返回一個字符串,該字符串是此字符串的子字符串。 |
String | substring(int beginIndex, int endIndex) | 返回一個字符串,該字符串是此字符串的子字符串。 |
char[] | toCharArray() | 將此字符串轉(zhuǎn)換為新的字符數(shù)組。 |
String | toLowerCase() | 使用默認(rèn)語言環(huán)境的規(guī)則將此 String所有字符轉(zhuǎn)換為小寫。 |
String | toUpperCase() | 使用默認(rèn)語言環(huán)境的規(guī)則將此 String所有字符轉(zhuǎn)換為大寫。 |
String | toUpperCase(Locale locale) | 使用給定 Locale的規(guī)則將此 String所有字符轉(zhuǎn)換為大寫。 |
static String | valueOf(T i) | 返回T參數(shù)的字符串表示形式。 |
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的步驟詳解
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Excel的導(dǎo)入、導(dǎo)出,文中示例代碼介紹的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴們可以參考一下2023-06-06java 并發(fā)編程之共享變量的實(shí)現(xiàn)方法
這篇文章主要介紹了java 并發(fā)編程之共享變量的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Spring Boot實(shí)現(xiàn)數(shù)據(jù)訪問計(jì)數(shù)器方案詳解
在Spring Boot項(xiàng)目中,有時需要數(shù)據(jù)訪問計(jì)數(shù)器,怎么實(shí)現(xiàn)數(shù)據(jù)訪問計(jì)數(shù)器呢?下面小編給大家?guī)砹薙pring Boot數(shù)據(jù)訪問計(jì)數(shù)器的實(shí)現(xiàn)方案,需要的朋友參考下吧2021-08-08linux部署出現(xiàn)java文件操作報(bào)錯:java.io.FileNotFoundException解決辦法
這篇文章主要g介紹了linux部署出現(xiàn)java文件操作報(bào)錯:java.io.FileNotFoundException解決的相關(guān)資料,這個錯誤通常表示你的Spring Boot應(yīng)用程序無法找到指定的文本文件,需要的朋友可以參考下2023-12-12Java二叉搜索樹基礎(chǔ)原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java二叉搜索樹基礎(chǔ)原理與實(shí)現(xiàn)方法,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Java二叉搜索樹的基本概念、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03SpringBoot使用hutool-captcha實(shí)現(xiàn)驗(yàn)證碼生成與驗(yàn)證
在springboot的登陸頁面中為了防止機(jī)器大規(guī)模注冊,機(jī)器暴力破解數(shù)據(jù)密碼等危害,需要驗(yàn)證隨機(jī)生成的驗(yàn)證碼,本文主要介紹了SpringBoot使用hutool-captcha實(shí)現(xiàn)驗(yàn)證碼生成與驗(yàn)證,感興趣的可以了解一下2023-12-12詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)
這篇文章主要介紹了詳解java JDK 動態(tài)代理類分析(java.lang.reflect.Proxy)的相關(guān)資料,需要的朋友可以參考下2017-06-06JAVA實(shí)現(xiàn)單例模式的四種方法和一些特點(diǎn)
JAVA實(shí)現(xiàn)單例模式的四種方法和一些特點(diǎn),需要的朋友可以參考一下2013-03-03