目錄
一、認識String
1.JDK中的String
#2.建立字串的四種方式
3.字串的字面量
4.字串比較相等
首頁 Java java教程 java的String類別如何使用

java的String類別如何使用

Apr 19, 2023 pm 01:19 PM
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關鍵字,此時新建一個物件存入堆中,然後st​​r1 指向堆中的對象,在指向第二行第三行程式碼時,發現常數池中已經存在該對象,不再新建,遇到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類別如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles