String與StringBuffer和StringBuilder的根本區別

*************************************優雅的分割線 **********************************

分享一波:程序員賺外快-必看的巔峰干貨

如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程

請關注微信公眾號:HB荷包
在這里插入圖片描述
一個能讓你學習技術和賺錢方法的公眾號,持續更新
*************************************優雅的分割線 **********************************

String與StringBuffer和StringBuilder的根本區別(String為什么無法修改字符串長度)

從網上看了很多的信息,說的大部分是關于final修飾的原因,卻沒有詳細的解釋!根據自己收集的資料,跟大家分享一下我的觀點(有錯請指正)。
1.我們都知道在修改字符串長度的時候,StringBuffer和StringBuilder的修改字符串效率要高于String,原因也是簡單的,因為StringBuffer和StringBuilder在修改的時候,不會重新創建對象,而String卻是要重新創建對象的。
有人說這種情況的原因在于String是被final修飾的,一旦創建便不能修改。但是StringBuffer和StringBuilder同樣是final修飾的,大家有沒有想過為什么他們可以修改呢? 如圖

String的圖
在這里插入圖片描述
StringBuffer(StringBuilder一樣)的圖
在這里插入圖片描述
所以原因并不在于StringBuffer和StringBuilder還有String是被final修飾的!
那么真實的原因是什么?
我們要知道,字符串在本質上是字符數組,所以我們來看看StringBuffer和StringBuilder還有String是如何定義字符數組的,通過對數組的定義來發現其中的原理。 如圖

StringBuilder的源碼圖(因為StringBuilder中大多數方法都是調用父類的AbstractStringBuilder,所以直接上父類源碼,StringBuffer是一樣的)
在這里插入圖片描述
String的源碼圖
在這里插入圖片描述
發現了嗎?兩者的區別在于String的字符數組是final修飾的,而StringBuffer和StringBuilder并沒有!

詳細解釋

或許在這里有人說,在java里數組的長度是不可變的,所以有final修飾數組和沒有final修飾沒有區別!在這里要說確實,數組是不可更改的,但是我們要改的并不是數組,而是類中的一個屬性!
final修飾的屬性是最終的,不可更改!沒有final修飾的屬性是可以修改的!
這樣就造成,String中的字符數組屬性一旦創建,便無法修改!要修改字符數組的屬性,就只能重新新造一個字符數組,也就是新創建一個String對象!這就相當于字符數組屬性和String形成了一個整體,牽一發而動全身!
而StringBuffer和StringBuilder中的字符數組屬性可以更改,在修改字符串時,可以通過修改沒有fianl修飾的字符數組屬性,而不用重新創建對象。

*************************************優雅的分割線 **********************************

分享一波:程序員賺外快-必看的巔峰干貨

如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程

請關注微信公眾號:HB荷包
在這里插入圖片描述
一個能讓你學習技術和賺錢方法的公眾號,持續更新
*************************************優雅的分割線 **********************************

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/537077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

16進制 ksh_AIX系統中如何統計進程打開的文件數目

作者:李燁楠 中國建設銀行來自微信公眾號:平臺人生環境: AIX 6.1 AIX7.1前言:用戶有時需要統計一個進程打開的文件數目,比如,在當前打開文件句柄使用量是否超過用戶資源限制(/etc/security/limits)中 nofiles的取值時。那么&#…

前端Http協議緩存初解

[TOC] 簡介 用戶獲取網絡資源,需要通過非常長的網絡去服務器上請求資源,另外服務端為了應對大量的用戶請求而不斷的提升硬件性能與帶寬。這對用戶與服務端都非常的不友好。而緩存就是為了解決用戶請求速度與釋放服務器壓力而生的。 為什么我會寫Http緩存&#xff0c…

詳解java訪問修飾符

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

educoder 二進制數據的位運算_二進制與位運算實用操作匯總(基礎篇)

位運算是最高效而且占用內存最少的算法操作,但也是最難看懂的操作。然而,關于位運算的用法,筆者查了許多資料,似乎都沒有找到詳細而系統的講解資料。筆者對位運算的操作相當感興趣,因此斗膽嘗試對位運算來一個的總結。…

企業為什么要做SEO,它的重要性有哪些?

對于SEO工作而言,我們知道一個網站做SEO的基礎訴求就是讓用戶和搜索引擎更好的理解網站內容,雖然隨著搜索引擎算法技術的迭代,目前SEO面臨更大的挑戰與競爭,但基于搜索營銷,它目前仍然顯得十分重要。 那么&#xff0…

白話說編程之java線程

白話說編程之java線程線程和進程:進程:線程:線程和進程的區別:詳解多線程:并發為什么使用并發并發的執行原理并行線程的五種狀態:創建狀態:就緒狀態:運行狀態:阻塞狀態:死…

powerdesigner顯示工具面板_photoshop教程-畫筆工具預設與選項設置

定義畫筆預設在打開的“畫筆”面板中,單擊左側的“畫筆筆尖形狀”名稱,可顯示筆尖形狀圖案。單擊“畫筆”面板左側其他不同的選項名稱,在右側就會顯示其對應的調節項。只單擊不同選項前面的方框,可使此選項有效,但右側…

C#屬性的聲明和使用演示源碼片段

工作閑暇時間,將代碼過程重要的一些代碼做個收藏,如下代碼是關于C#屬性的聲明和使用演示片段的代碼,應該對碼農有一些好處。 using System; class Person {private string myName "N/A";private int myAge 0;public string Name{g…

深入理解== 和 equals 的區別

深入理解 和 equals 的本質區別簡介區別:圖解:注意點:源碼分析:總結分享一波:程序員賺外快-必看的巔峰干貨簡介 初學者常常被" “和‘equals ’所折磨,為什么,因為他們的大概意思相同,都是…

rsem比對_RSEM方法比對和表達量計算

分析模塊,封裝了Trinity程序包中的“align_and_estimate_abundance.pl”腳本,進行原始數據與轉錄本序列的比對和表達量計算。其中,核心程序為,Bowtie或Bowtie2進行原始數據與轉錄本序列的比對,RSEM根據比對結果進行表達…

java sleep和wait區別

為什么80%的碼農都做不了架構師?>>> 關于sleep和wait區別解析: sleep只是釋放CPU資源,并不釋放資源鎖對象,wait是會釋放掉資源鎖對象。 比如,有個鎖對象object,線程1和線程2都會鎖住object對象…

u8轉完看不到菜單_web網頁有錯誤,無法看到操作菜單-用友U8

文章摘要:本文提供在用友U8V8.51erp軟件財務會計管理的WEB財務模塊中客戶在使用WEB功能時,沒有使用默認的設置,是將WEB功能設置在自己的網站上面,訪問WEB功能沒有問題,界面出來了,輸入用戶名、密碼、選擇帳…

.Net Core 項目引用本地類庫方式(二)

上篇文章有詳細的介紹.Net Core 項目中引用本地類庫通過打包,然后Nugety引用方式,這里再介紹一種引用包的方式 轉載于:https://www.cnblogs.com/wangshitou/p/10283800.html

深入理解equals和hashCode關系和區別

深入理解equals和hashCode關系和區別直入主題:區別:1.他們判斷對象相同的方式不一樣:2.他們判斷對象是否相等的準確率不一樣:改寫equals時總是要改寫hashcode分享一波:程序員賺外快-必看的巔峰干貨為什么要說equals和hashCode這兩…

lol韓服游戲內設置_韓服LOL進去了還不能玩?教你如何玩韓服!

領取免費韓服LOL安全號,百度搜索韓服LOL微博關注即可!上圖錯誤為常識性錯誤,LOL韓服游戲的安裝文件路徑有中文所導致的錯誤 解決方法:將安裝路徑里的中文改成英文即可 舉例 包含中文漢字的文件夾都是錯誤的 Program FilesLOL韓服 …

Jdk 和 jre 的 關系和區別

Jdk 和 jre 的 關系和區別 區別: JDK:是Java Development Kit 的簡稱–>翻譯過來就是:Java 開發工具包。是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。 JRE:是Java Runtime Environm…

OpenCV-Python入門教程7-PyQt編寫GUI界面

前面一直都是使用命令行運行代碼,不夠人性化。這篇用Python編寫一個GUI界面,使用PyQt5編寫圖像處理程序。包括:打開、關閉攝像頭,捕獲圖片,讀取本地圖片,灰度化和Otsu自動閾值分割的功能。 使用Qt Designer…

spark 廣播變量大數據_大數據處理 | Spark集群搭建及基本使用

點擊藍字關注我前面用了一篇文章詳細的介紹了集群HDFS文件系統的搭建,HDFS文件系統只是一個用于存儲數據的系統,它主要是用來服務于大數據計算框架,例如MapReduce、Spark,本文就接著上一篇文章來詳細介紹一下Spark集群的搭建及Spa…

如何將本地項目上傳到gitee

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…