国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

<Java>一把王者的時間,帶你認識String類

這篇具有很好參考價值的文章主要介紹了<Java>一把王者的時間,帶你認識String類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

<Java>一把王者的時間,帶你認識String類



前言

String 類在Java中是很常用的類,很重要的類,在后續(xù)的學習中經(jīng)常會用到,是后續(xù)學習的基礎(chǔ)


一、認識String

1.JDK中的String

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

2.創(chuàng)建字符串的四種方式

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

方式二:通過構(gòu)造方法產(chǎn)生對象
String str1 = new String(" hello word ");

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

方式四:通過String的靜態(tài)方法valueOf(任意數(shù)據(jù)類型) = >轉(zhuǎn)為字符串(常用)
String str2 = String.valueOf(10);
<Java>一把王者的時間,帶你認識String類

3.字符串的字面量

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

4.字符串比較相等

所有的引用數(shù)據(jù)類型在比較是否相等時,使用equals方法比較,JDK的常用類,都已經(jīng)覆寫了equals方法,直接使用即可
引用數(shù)據(jù)類型使用 == 比較的是地址
下圖是兩個引用指向了同一塊地址空間,和字符串的常量池有關(guān)
<Java>一把王者的時間,帶你認識String類
下圖產(chǎn)生了兩個對象,兩塊地址空間,使用==返回的就是false
<Java>一把王者的時間,帶你認識String類
equals的比較大小是區(qū)分大小寫的比較
<Java>一把王者的時間,帶你認識String類
equalsIgnoreCase方法是不區(qū)分大小寫的比較
<Java>一把王者的時間,帶你認識String類

二、字符串的常量池

1.什么是字符串常量池

<Java>一把王者的時間,帶你認識String類
當使用直接賦值法產(chǎn)生字符串對象的時候,JVM會維護一個字符串的常量池,若該對象在堆中還不存,就產(chǎn)生一個字符串對象加入到字符串常量池中;當繼續(xù)使用直接賦值法產(chǎn)生字符串對象的時候,JVM發(fā)現(xiàn)該引用指向的內(nèi)容在常量池中已經(jīng)存在了,此時就不再新建字符串對象,而是直接復用已有的對象,這也是為什么上圖的三個引用指向的是同一塊地址
<Java>一把王者的時間,帶你認識String類
當?shù)谝淮萎a(chǎn)生對象的時候,常量池中還什么都沒有,就在常量池中產(chǎn)生一個字符串對象存入,當?shù)诙谌萎a(chǎn)生對象時,JVM發(fā)現(xiàn)常量池中已經(jīng)存在相同的內(nèi)容,就不再產(chǎn)生新的對象,直接指向和str1相同的地址空間

<Java>一把王者的時間,帶你認識String類
程序都是從右向左執(zhí)行的,此時第一行代碼的右邊就是一個字符串常量,也是一個字符串對象,所以先在常量池中開辟一塊空間,然后新建一個字符串對象存入,程序再往左執(zhí)行,遇到new關(guān)鍵字,此時新建一個對象存入堆中,然后str1 指向堆中的對象,在指向第二行第三行代碼時,發(fā)現(xiàn)常量池中已經(jīng)存在該對象,不再新建,遇到new關(guān)鍵字就新建對象,內(nèi)存圖如下:
<Java>一把王者的時間,帶你認識String類

2.手工入池方法

String類提供的intern方法,這是一個本地方法:
<Java>一把王者的時間,帶你認識String類
調(diào)用intern方法會將當前字符串引用指向的對象保存到字符串常量池中,有兩種情況:
1.若當前常量池中已經(jīng)存在了該對象,則不再產(chǎn)生新的對象,返回常量池中的String對象
2.若當前常量池中不存在該對象,則將該對象入池,返回入池后的地址。

1.看一下下面這幾行代碼的輸出
<Java>一把王者的時間,帶你認識String類
因為intern方法是有返回值的,此時str1只是調(diào)用了intern方法,并沒有接收返回值,所以str1還是指向堆中的對象,str2指向常量池中的對象,所以返回false;
<Java>一把王者的時間,帶你認識String類
只要接收一下調(diào)用intern方法的返回值,就會返回true;
<Java>一把王者的時間,帶你認識String類
此時就將str1指向的對象手動入池了,池中已有該對象,直接讓str1指向該對象
<Java>一把王者的時間,帶你認識String類
2.再看看下面這幾行代碼的輸出
<Java>一把王者的時間,帶你認識String類
手動入池時,池中還沒有任何東西,直接移入常量池中
<Java>一把王者的時間,帶你認識String類


三、字符串的不可變性

1.為什么不可變

注意:所謂的字符串不可變,指的是字符串的內(nèi)容不可變,而不是字符串的引用不能變
<Java>一把王者的時間,帶你認識String類
這里的不可變指的是" hello " , " world " , " helloworld " , " !!! " , 以及拼接后的"helloworld!!!"這些已經(jīng)創(chuàng)建好的字符串對象,這些對象一旦聲明后就無法修改其內(nèi)容,但是引用是可以改變的,一會指向hello,一會指向helloworld,一會指向hello world?。?!,這都是可以的
<Java>一把王者的時間,帶你認識String類
字符串就是就是一個字符數(shù)組—> char[],字符串其實在字符數(shù)組中保存。字符串的內(nèi)容為什么不能改變?我們看看字符串的源碼就知道了。
<Java>一把王者的時間,帶你認識String類
我們可以看到String內(nèi)部的字符數(shù)組是被封裝起來的,String類的外部無法訪問到這個字符數(shù)組,更何談改變字符串的內(nèi)容
String str = " hello ";
<Java>一把王者的時間,帶你認識String類

2.如何修改字符串內(nèi)容

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

若需要頻繁的進行字符串的拼接,使用StringBuilder類的append方法,這里只產(chǎn)生了一個對象,一會變成hello,一會變成hello world
<Java>一把王者的時間,帶你認識String類

3.StringBuilder類的具體使用

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

1.StringBuilder變?yōu)镾tring類調(diào)用toString方法即可
<Java>一把王者的時間,帶你認識String類

2.String類轉(zhuǎn)變?yōu)镾tringBuilder類,使用StringBuilder的構(gòu)造方法或者append方法
<Java>一把王者的時間,帶你認識String類
<Java>一把王者的時間,帶你認識String類
其他常用方法:
a.字符串的反轉(zhuǎn)操作,sb提供的reverse();
<Java>一把王者的時間,帶你認識String類

b.刪除指定范圍的數(shù)據(jù),delete(int start,int end);刪除從start開始,到end之前的所有內(nèi)容,左閉右開區(qū)間
<Java>一把王者的時間,帶你認識String類

c.插入操作,insert(int start,各種數(shù)據(jù)類型):從start索引位置開始插入,插入的起始索引為start
<Java>一把王者的時間,帶你認識String類文章來源地址http://www.zghlxwxcb.cn/news/detail-418277.html

到了這里,關(guān)于<Java>一把王者的時間,帶你認識String類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【JAVA】帶你認識java方法|java中的方法&方法中的重載和遞歸

    【JAVA】帶你認識java方法|java中的方法&方法中的重載和遞歸

    作者主頁: paper jie的博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVASE語法系列》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將javaSE基礎(chǔ)知識一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄

    2024年02月14日
    瀏覽(12)
  • 一把LOL的時間我入門了Go語言

    一把LOL的時間我入門了Go語言

    前言: Go 語言是由 Google 公司推出的一款新的編程語言,作為谷歌的親兒子,發(fā)展勢頭迅猛,各個大廠目前都在積極推進 Go 語言的使用。Go 是云計算、云原生、區(qū)塊鏈等眾多前沿領(lǐng)域的首推語言,目前流行的 Docker、Kubernetes 等開源項目也都是基于 Go 語言的。 Why GO?用 Go 的好

    2023年04月15日
    瀏覽(14)
  • Java時間轉(zhuǎn)換問題 [Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.

    Java時間轉(zhuǎn)換問題 [Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.

    default message [Failed to convert property value of type ‘java.lang.String’ to required type \\\'java. 遇到j(luò)ava接收前端日期字符串返回到后端Date字段時報錯。 通過在報錯字段上添加@DateTimeFormat(pattern = “yyyy-MM-dd”)進行解決。 接下來是分析了引用一位博主的博客,我在簡單總結(jié)一下: @JsonFormat注

    2024年02月13日
    瀏覽(26)
  • 【C++初階】string 類的認識與學習

    【C++初階】string 類的認識與學習

    ? 在學習string類之前,先在這里推薦2個好用的網(wǎng)站,可以用來查閱C++的相關(guān)知識 https://cplusplus.com https://en.cppreference.com/w/ 上面的是非官方的,下面的官方的,但是個人感覺還是上面的好用。 簡單來說, string 是C++中用來管理字符串的類。 他有很多接口,大致分為: 1.string類

    2024年02月09日
    瀏覽(25)
  • 【javaSE】 萬字帶你認識異常

    【javaSE】 萬字帶你認識異常

    在生活中,一個人表情痛苦,出于關(guān)心,可能會問:你是不是生病了,需要我陪你去看醫(yī)生嗎? 在程序中也是一樣,程序猿是一幫辦事嚴謹、追求完美的高科技人才。在日常開發(fā)中,絞盡腦汁將代碼寫的盡善盡美,在程序運行過程中,難免會出現(xiàn)一些奇奇怪怪的問題。 有時

    2024年02月14日
    瀏覽(20)
  • Outlook郵箱不簡單帶你重新認識它

    Outlook郵箱不簡單帶你重新認識它

    我們都知道微軟公司提供的郵箱產(chǎn)品有兩個,開放免費使用Outlook和Hotmail,其實還有一個Live郵箱,只不過現(xiàn)在不對外開放了,盡管如此,Outlook和Hotmail也是Live的二級域名。 二級域名說明:是父級的子級,同屬一個服務(wù)器。 ? Outlook郵箱有兩大特色: 一、Outlook是跨平臺化產(chǎn)品

    2024年02月05日
    瀏覽(17)
  • 大語言模型底層架構(gòu)丨帶你認識Transformer

    本文分享自華為云社區(qū)《大語言模型底層架構(gòu)你了解多少?大語言模型底層架構(gòu)之一Transfomer的介紹和python代碼實現(xiàn)》,作者: 碼上開花_Lancer 。 語言模型目標是建模自然語言的概率分布,在自然語言處理研究中具有重要的作用,是自然語言處理基礎(chǔ)任務(wù)之一。大量的研究從

    2024年02月05日
    瀏覽(22)
  • 一篇文章帶你快速認識區(qū)塊鏈(必看)

    一篇文章帶你快速認識區(qū)塊鏈(必看)

    ? ? ? ?區(qū)塊鏈技術(shù),這一劃時代的分布式賬本技術(shù),正在全球范圍內(nèi)掀起一場深度的信任與協(xié)作模式變革。區(qū)塊鏈如同一部由多方共同維護的公開而又安全的大賬本,每一筆交易都被打包成一個區(qū)塊,通過高級密碼學手段確保傳輸和訪問安全,并按照時間順序串聯(lián)起來,形

    2024年04月25日
    瀏覽(35)
  • 網(wǎng)絡(luò)掃描,端口掃描,漏洞掃描,帶你認識nmap

    nmap是一款用于網(wǎng)絡(luò)發(fā)現(xiàn)和安全評估的開源工具。它可以掃描網(wǎng)絡(luò)主機,了解主機的開放端口和服務(wù)信息,甚至可以對操作系統(tǒng)進行識別。 以下是nmap主要用途: 網(wǎng)絡(luò)發(fā)現(xiàn):nmap可以掃描網(wǎng)絡(luò)上的主機,了解主機的IP地址、MAC地址等信息。 端口掃描:nmap可以掃描網(wǎng)絡(luò)上的主機,

    2024年02月13日
    瀏覽(17)
  • C++ 帶你吃透string容器的使用

    C++ 帶你吃透string容器的使用

    接下來我們就要正式進入C++中STL的學習當中了 今天我們介紹的是STL中的string容器 我們對于STL的學習可以借助文檔去學習: 我們今天就要通過cplusplus這個網(wǎng)站來介紹string容器 首先我們要了解的是: 什么是string容器? 注意:使用string容器需要包含頭文件:string 在了解了string容器之后

    2024年02月05日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包