【Java】字符串常量池

文章目錄

  • 一.字符串常量池(StringTable)
    • 1.1 定義
    • 1.2 演示示例
    • 1.3 intern方法


一.字符串常量池(StringTable)

1.1 定義

字符串常量詞本質是一個固定大小的HashTable。當用一個字符串構造String對象時,首先會去StringTable中查看是否存在在字符串,如果存在,返回該字符串的引用,如果不存在,將該字符串放入StringTabel并返回引用

如果使用字符串常量去構造String對象,那么編譯器會自動放入String Table;
如果使用 new String(“str”) 去構造String對象,則首先會在堆上開辟一份空間,之后會去String Table拿str的引用(拿的規則如上),并給新開辟的空間。

String的成員
如上為String類的成員,可以看到在String中并沒有直接存儲字符串,而只是通過byte數組存放每個字符。

1.2 演示示例

public class Test {public static void main(String[] args) {String str1="abc";String str2="abc";System.out.println(str1==str2); //true}
}

image-20250713183002507

為什么以下內容為false?

public class Test {public static void main(String[] args) {String str1="abc";String str2="abc";System.out.println(str1==str2); //trueString str1=new String("abc");String str2=new String("abc");System.out.println(str1==str2); //false}
}

image-20250713195214440

new會在堆上開辟空間,這個空間是返回給str的,這不是StringTable的空間,是系統分配的,因此str的地址是不同的。StringTable返回的引用會給new出來的空間。

1.3 intern方法

intern方法的作用為將當前的字符串常量值放入String Table,放入規則與前面的規則一致。

public class Test {public static void main(String[] args) {char[] ch=new char[]{'a','b','c'};String s1=new String(ch); //abc不會放入StringTable,因為不是雙引號,不會自動放//s1.intern();String s2="abc";System.out.println(s1==s2);  //寫intern為true,不寫為false}
}

image-20250713201426556

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

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

相關文章

數據通信與計算機網絡——模擬傳輸

主要內容數字到模擬轉換幅移鍵控ASK頻移鍵控FSK相移鍵控PSK正交振幅調制QAM模擬信號調制調幅AM調頻FM調相PM一、數字到模擬轉換數字信號需要低通通道,如果現實應用中只有帶通通道,只能選擇模擬信號進行傳輸。將數字數據轉換為帶通模擬信號,傳…

如何用Python并發下載?深入解析concurrent.futures 與期物機制

concurrent.futures模塊的核心價值 Python的concurrent.futures模塊提供了線程池(ThreadPoolExecutor)和進程池(ProcessPoolExecutor)兩種并發模型,通過高層接口簡化并發編程。其核心優勢在于: 自動管理資源…

MMKV 存儲json list數據(kotlin)

1、添加依賴與初始化 首先在 build.gradle 中添加 MMKV 依賴: implementationcom.tencent:mmkv:1.2.12 在 Application 類中初始化 MMKV: import android.app.Application import com.tencent.mmkv.MMKVclass MyApp : Application() { override fun onCreate() { super.o…

C++ -- STL-- stack and queue

////// 歡迎來到 aramae 的博客,愿 Bug 遠離,好運常伴! ////// 博主的Gitee地址:阿拉美 (aramae) - Gitee.com 時代不會辜負長期主義者,愿每一個努力的人都能達到理想的彼岸。1. stack的介紹和使用 2. queue的介紹…

信息論至AI實踐:交叉熵的原理全景與應用深度解析

1 定義與數學原理:從信息論到分布差異度量 交叉熵(Cross Entropy)是信息論中用于量化兩個概率分布差異的核心概念,由Claude Shannon的信息論發展而來。它測量了在相同事件集合上,使用估計的概率分布q對服從真實概率分…

WAF 能防御哪些攻擊?

WAF(Web 應用防火墻)是網站和Web應用的安全守門人,但很多用戶對其具體防御范圍一知半解。實際上,WAF 能針對性攔截多種網絡攻擊,從常見的注入攻擊到復雜的惡意爬蟲,覆蓋Web安全的核心威脅。本文詳解WAF的防…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第二十二課——圖像直方圖統計的FPGA實現

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程…

群暉中相冊管理 immich大模型的使用

相對于其他的相冊管理軟件,Immich的智能搜索和人臉識別功能是其優勢,通過應用機器學習模型,其智能搜索和人臉識別功能更為先進。 一、大模型的下載與安裝 網上有大佬提供了相關大模型的下載:https://url22.ctfile.com/d/58003522…

在 Windows 上使用 Docker 運行 Elastic Open Crawler

作者:來自 Elastic Matt Nowzari 了解如何使用 Docker 在 Windows 環境中運行 Open Crawler。 了解將數據攝取到 Elasticsearch 的不同方式,并深入實踐示例,嘗試一些新方法。 Elasticsearch 擁有大量新功能,助你為特定場景構建最…

iOS高級開發工程師面試——RunTime

iOS高級開發工程師面試——RunTime 一、簡介 二、介紹下 RunTime 的內存模型(isa、對象、類、metaclass、結構體的存儲信息等) 對象 類 三、為什么要設計 metaclass ? 四、class_copyIvarList & class_copyPropertyList區別? 五、class_rw_t 和 class_ro_t 的區別? 六…

實現分頁查詢

分頁查詢分頁查詢語句項目中添加分頁功能按鈕設置前后端代碼功能實現分頁查詢語句 限制查詢的 sql 語句: select * from student limit 0,4sql 查詢結果如下: 分頁查詢的每一頁都對應一行 sql 語句,若每一行都寫單獨對應的 sql 語句不僅重復…

[QOI] qoi_desc | qoi_encode | qoi_decode

鏈接:https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression (看代碼設計的時候,真的大為震撼,偉大的algorithm T.T) docs:QOI圖像格式 qoi項目提出了Quite OK Image(QOI&am…

智慧城軌可視化:一屏智管全城

圖撲智慧城軌可視化系統,把地鐵線路、車站、列車都搬進三維畫面。列車晚點預警、站臺擁擠提示、設備故障定位…… 這些關鍵信息一屏聚合,調度員能快速調整發車頻次,疏導高峰客流。遇上突發情況,系統聯動應急方案,同步顯…

包新的Git安裝與使用教程(2024九月更新)

目錄 一、安裝git 1.下載git 2.git安裝 3.環境變量配置與測試 二、使用教程 1.創建版本庫 2.版本回退 3.刪除和恢復文件 一、安裝git 1.下載git 官方下載地址:https://git-scm.com/download 然后進入以下頁面,點擊下載鏈接即可(windows一般都是…

中望3D 2026亮點速遞(1)-全新槽功能螺紋功能,減少繁瑣操作

本文為CAD芯智庫整理,未經允許請勿復制、轉載!中望3D 2026全新的槽功能,包括:(1)可快速生成多種槽形;(2)快速生成一個或多個槽;(3)支持…

2025毫米波雷達技術白皮書:智能汽車與物聯網的感知核心

隨著人工智能、物聯網(IoT)和智能汽車產業的迅猛發展,毫米波雷達技術正成為感知領域的核心驅動力。毫米波雷達憑借其高精度、全天候和強抗干擾能力,廣泛應用于智能汽車的自動駕駛、物聯網的環境感知以及工業自動化。2025年&#x…

用 React-Three-Fiber 實現雪花下落與堆積效果:從零開始的 3D 雪景模擬

在 Web3D 開發中,自然現象模擬一直是極具吸引力的主題。本文將基于 React-Three-Fiber(R3F)框架,詳解如何實現一個包含雪花下落、地面堆積的完整雪景效果。我們會從基礎粒子系統入手,逐步完善物理交互邏輯,…

從抓包GitHub Copilot認證請求,認識OAuth 2.0技術

引言 在現代開發工具中,GitHub Copilot 以智能、嵌入式的人工智能代碼補全能力著稱。作為一項涉及用戶敏感數據和付費授權的服務,其認證授權流程尤為值得技術研究。本文基于實際抓包 VS Code 中的 Copilot 登錄認證請求,系統梳理其 OAuth 2.…

Linux操作系統之線程:分頁式存儲管理

目錄 前言: 一、分頁式存儲管理 二、二級頁表的地址轉化 三、缺頁中斷 總結 前言: 我們上篇文章簡單介紹了線程的一些知識點,但是還有很多坑沒有給大家填上,包括頁表部分我們還沒為大家說明。 本篇文章我將會繼續為大家講解…

xss1-8

Level-1<script>alert()</script>基礎反射型 無任何過濾Level-2"> <script>alert()</script> <"閉合屬性&#xff1a;">用來閉合當前標簽的value屬性注入新標簽&#xff1a;閉合屬性后&#xff0c;插入獨立的<script>…