91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的String類如何使用

發布時間:2022-05-25 14:34:55 來源:億速云 閱讀:179 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“java的String類如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“java的String類如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

java的String類如何使用

一、認識String

1.JDK中的String

首先我們看看JDK中的String類源碼,它實現了很多接口,可以看到String類被final修飾了,這就說明String類不可以被繼承,String不存在子類,這樣所有使用JDK的人,用到的String類都是同一個,如果String允許被繼承,每個人都可以對String進行擴展,每個人使用的String都不是同一個版本,兩個不同的人使用相同的方法,表現出不同的結果,這就導致代碼沒辦法進行開發了
繼承和方法覆寫在帶來靈活性的同時,也會帶來很多子類行為不一致的問題
java的String類如何使用

2.創建字符串的四種方式

方式一:直接賦值(常用)
String str = " hello word "

方式二:通過構造方法產生對象
String str1 = new String(" hello word ");

方式三:通過字符數組產生對象
char[] data = new char[]{‘a’ , ‘b’ ,‘c’};

方式四:通過String的靜態方法valueOf(任意數據類型) = >轉為字符串(常用)
String str2 = String.valueOf(10);
java的String類如何使用

3.字符串的字面量

字面量:直接寫出來的數值叫做字面量
10 – > int字面量
10.1 --> double字面量
true --> boolean字面量
" abc " – > String字面量
字符串的字面量其實就是一個字符串對象
String str = “hello word”;
String str2 = str;
此時這既是一個字符串的字面量,也是字符串的對象,為了方便理解,畫個圖,此時是為了方便理解我們暫時先認為它儲存在堆上,其實實在方法區中存放
java的String類如何使用
若此時讓str2 = “Hello”;此時對str的輸出并沒有影響,因為被" "括起來的Hello也是一個字符串對象,說明此時在堆上新開辟了一塊空間,而此時str2保存的就是新對象的地址空間,對str沒有影響
java的String類如何使用

4.字符串比較相等

所有的引用數據類型在比較是否相等時,使用equals方法比較,JDK的常用類,都已經覆寫了equals方法,直接使用即可
引用數據類型使用 == 比較的是地址
下圖是兩個引用指向了同一塊地址空間,和字符串的常量池有關
java的String類如何使用
下圖產生了兩個對象,兩塊地址空間,使用==返回的就是false
java的String類如何使用
equals的比較大小是區分大小寫的比較
java的String類如何使用
equalsIgnoreCase方法是不區分大小寫的比較
java的String類如何使用

二、字符串的常量池

1.什么是字符串常量池


java的String類如何使用
當使用直接賦值法產生字符串對象的時候,JVM會維護一個字符串的常量池,若該對象在堆中還不存,就產生一個字符串對象加入到字符串常量池中;當繼續使用直接賦值法產生字符串對象的時候,JVM發現該引用指向的內容在常量池中已經存在了,此時就不再新建字符串對象,而是直接復用已有的對象,這也是為什么上圖的三個引用指向的是同一塊地址
java的String類如何使用
當第一次產生對象的時候,常量池中還什么都沒有,就在常量池中產生一個字符串對象存入,當第二第三次產生對象時,JVM發現常量池中已經存在相同的內容,就不再產生新的對象,直接指向和str1相同的地址空間


java的String類如何使用
程序都是從右向左執行的,此時第一行代碼的右邊就是一個字符串常量,也是一個字符串對象,所以先在常量池中開辟一塊空間,然后新建一個字符串對象存入,程序再往左執行,遇到new關鍵字,此時新建一個對象存入堆中,然后str1 指向堆中的對象,在指向第二行第三行代碼時,發現常量池中已經存在該對象,不再新建,遇到new關鍵字就新建對象,內存圖如下:
java的String類如何使用

2.手工入池方法

String類提供的intern方法,這是一個本地方法:
java的String類如何使用
調用intern方法會將當前字符串引用指向的對象保存到字符串常量池中,有兩種情況:
1.若當前常量池中已經存在了該對象,則不再產生新的對象,返回常量池中的String對象
2.若當前常量池中不存在該對象,則將該對象入池,返回入池后的地址。

1.看一下下面這幾行代碼的輸出
java的String類如何使用
因為intern方法是有返回值的,此時str1只是調用了intern方法,并沒有接收返回值,所以str1還是指向堆中的對象,str2指向常量池中的對象,所以返回false;
java的String類如何使用
只要接收一下調用intern方法的返回值,就會返回true;
java的String類如何使用
此時就將str1指向的對象手動入池了,池中已有該對象,直接讓str1指向該對象
java的String類如何使用
2.再看看下面這幾行代碼的輸出
java的String類如何使用
手動入池時,池中還沒有任何東西,直接移入常量池中
java的String類如何使用


三、字符串的不可變性

1.為什么不可變

注意:所謂的字符串不可變,指的是字符串的內容不可變,而不是字符串的引用不能變
java的String類如何使用
這里的不可變指的是" hello " , " world " , " helloworld " , " !!! " , 以及拼接后的"helloworld!!!"這些已經創建好的字符串對象,這些對象一旦聲明后就無法修改其內容,但是引用是可以改變的,一會指向hello,一會指向helloworld,一會指向hello world!!!,這都是可以的
java的String類如何使用
字符串就是就是一個字符數組—> char[],字符串其實在字符數組中保存。字符串的內容為什么不能改變?我們看看字符串的源碼就知道了。
java的String類如何使用
我們可以看到String內部的字符數組是被封裝起來的,String類的外部無法訪問到這個字符數組,更何談改變字符串的內容
String str = " hello ";
java的String類如何使用

2.如何修改字符串內容

1.在運行時通過反射破壞value數組的封裝
2.更換使用StringBuilder或者StringBuffer類 - - 已經不是一個類型了
a.StringBuilder:線程不安全,性能較強
b.StringBuffer:線程安全,性能較差
除此之外兩個類的用法完全相同

若需要頻繁的進行字符串的拼接,使用StringBuilder類的append方法,這里只產生了一個對象,一會變成hello,一會變成hello world
java的String類如何使用

3.StringBuilder類的具體使用

StringBuilder類和String是兩個獨立的類,StringBuilder類就是為了解決字符串的拼接問題產生的
StringBuilder類和String類的相互轉換:

1.StringBuilder變為String類調用toString方法即可
java的String類如何使用

2.String類轉變為StringBuilder類,使用StringBuilder的構造方法或者append方法
java的String類如何使用
java的String類如何使用
其他常用方法:
a.字符串的反轉操作,sb提供的reverse();
java的String類如何使用

b.刪除指定范圍的數據,delete(int start,int end);刪除從start開始,到end之前的所有內容,左閉右開區間
java的String類如何使用

c.插入操作,insert(int start,各種數據類型):從start索引位置開始插入,插入的起始索引為start
java的String類如何使用

讀到這里,這篇“java的String類如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太仆寺旗| 天镇县| 丰县| 长丰县| 张家川| 唐山市| 光泽县| 清流县| 土默特右旗| 巴中市| 什邡市| 五寨县| 边坝县| 新昌县| 那坡县| 宁化县| 孝昌县| 宜昌市| 额尔古纳市| 洛宁县| 普安县| 闵行区| 肥西县| 潜江市| 孝感市| 上高县| 婺源县| 梨树县| 卫辉市| 杨浦区| 巴彦淖尔市| 通州市| 延边| 本溪| 永城市| 蛟河市| 永平县| 仪征市| 尖扎县| 辽阳县| 富宁县|