【Java|第十九篇】面向對象九——String類和枚舉類

(四)面向對象

11、String類
(1)概述

? ? ? ? <1>String是一個類,引用數據類型,用來表示字符串;

? ? ? ? <2>String是Lang包下的類,使用不需要導包;

? ? ??? <3>字符串的值不能變,String對象是不可變的,一旦創建,他們的值就不能被修改。

? ? ? ?這里的意思是String對象所標識的棧空間中的引用地址值可以改

? ? ? ?但是堆空間中創建的對象的屬性值不可以改變,一旦創建就不能更改!

示例:

String s1 = new String("123");
s1 = new String("345");
//這樣修改是可以的,并沒有改動上一個對象中的屬性123,只是更改了s1的引用地址值
s1 = null;
//這樣修改也可以,將引用地址值指向了null

???????String類型的這個特點,使得很多操作其實都是在創建新的對象,并不是在原對象上操作

(2)String類的常用構造方法:? ??

下面給出一些案例:

public class Test_Basic {public static void main(String[] args) {// public String() : 創建一個空白字符串對象,不含有任何內容String s1 = new String();System.out.println(s1);// public String(char[] chs) : 根據字符數組的內容,來創建字符串對象char[] chs = {'a','b','c'};String s2 = new String(chs);System.out.println(s2);// public String(String original) : 根據傳入的字符串內容,來創建字符串對象String s3 = new String("123");System.out.println(s3);String s4 = "hello";System.out.println(s4);}
}

接下來是內存結構的展示:

(3)常量池:

?????????創建字符串對象,和其他普通對象一樣,會占用計算機的資源(時間和空間),作為最常用的數據類型,大量頻繁的創建字符串對象,會極大程度地影響程序的性能。

????????JVM為了提高性能和減少內存開銷,在實例化字符串常量的時候進行了一些優化

String常量池:

????????在Java中,String常量池是一塊特殊的內存區域,用于存儲字符串常量。String常量池的設計目的是為了節省內存和提高性能。

????????當我們創建字符串常量時,如果字符串常量池中已經存在相同內容的字符串,那么新創建的字符串常量會直接引用已存在的字符串對象,而不會創建新的對象。這樣可以避免重復創建相同內容的字符串,節省內存空間。

????????在JDK8及之后的版本中,字符串常量池的位置與其他對象的存儲位置,都位于堆內存中。這樣做的好處是,字符串常量池的大小可以根據需要進行調整,并且可以享受到垃圾回收器對堆內存的優化。

????????Java將字符串放入String常量池的方式:

1. 直接賦值:通過直接賦值方式創建的字符串常量會被放入常量池中。

????????例如: String str = "Hello";

2. 調用String類提供intern()方法:可以將字符串對象放入常量池中,并返回常量池中的引用。

????????例如: String str = new String("World").intern();

????????注意:通過new關鍵字創建的字符串對象不會放?入常量池中,而是在堆內存中創建一個新的對象。只有通過直接賦值或調用intern()方法才能將字符串放入常量池中。

案例:

public class Test062_String {public static void main(String[] args) {String s1 = "Hello"; // 字符串常量,放入常量池String s2 = "Hello"; // 直接引用常量池中的字符串對象System.out.println(s1 == s2); // true,引用相同// 直接new String對象,不會將'World'放入常量池String s3 = new String("World");// 調用intern()方法,將'World'放入常量池,并返回常量池中的引用String s4 = new java.lang.String("World").intern();String s5 = "World";System.out.println(s3 == s4); // false,引用不同System.out.println(s4 == s5); // true,引用相同}
}
public class Test062_String2 {public static void main(String[] args) {String s1 = "a";String s2 = "b";// 常量優化機制:"a" 和 "b"都是字面值常量,借助 + 連接,其結果 "ab" 也被當作常量String s3 = "a" + "b";String s4 = "ab";System.out.println(s3.equals(s4)); // trueSystem.out.println(s3 == s4); // trueSystem.out.println("-------------");String s5 = s1 + s2;System.out.println(s4.equals(s5)); // trueSystem.out.println(s4 == s5); // falseSystem.out.println("-------------");String s6 = (s1 + s2).intern();System.out.println(s4.equals(s6)); // trueSystem.out.println(s4 == s6); // true}
}
使用 + 拼接多個字符串常量,拼接的結果仍舊是字符串常量 ,變量不可以
如果結果字符串常量在常量池中不存在,則Java會將其放入到字符串常量池中
(4)常用方法:

1.?public int length()

  • 用法:獲取字符串的長度(字符個數)

  • 返回值int類型,即字符串中字符的數量

  • 調用者String對象本身(如"abc".length()

  • 是否改變原對象:不改變。僅查詢長度,不修改字符串內容

  • 示例:

    String s = "hello";
    int len = s.length(); // len = 5('h','e','l','l','o'共5個字符)
    

2.?public boolean equals(Object anObject)

  • 用法:比較當前字符串與參數對象的內容是否完全相同(嚴格區分大小寫)

  • 返回值boolean類型。true表示內容完全相同,false表示不同

  • 調用者String對象本身(如s1.equals(s2)

  • 是否改變原對象:不改變。僅做比較操作,不修改任何字符串

  • 注意

    • 需與==區分:equals()比較內容,==比較對象地址

    • 若參數為null,返回false

  • 示例

    String s1 = "abc";
    String s2 = "ABC";
    boolean b1 = s1.equals("abc"); // true(內容相同)
    boolean b2 = s1.equals(s2);    // false(大小寫不同)
    

3.?public char charAt(int index)

  • 用法:獲取字符串中指定索引位置的字符(索引從 0 開始)

  • 返回值char類型,即索引位置對應的字符

  • 調用者String對象本身(如s.charAt(2)

  • 是否改變原對象:不改變。僅查詢指定位置的字符

  • 注意:若索引超出范圍(index < 0index >= length()),會拋出StringIndexOutOfBoundsException

  • 示例

    String s = "hello";
    char c = s.charAt(1); // c = 'e'(索引1對應的字符)
    

4.?public char[] toCharArray()

  • 用法:將字符串轉換為字符數組(每個元素對應字符串中的一個字符)

  • 返回值char[]類型,即包含字符串所有字符的數組

  • 調用者String對象本身(如s.toCharArray()

  • 是否改變原對象:不改變。僅生成新的字符數組,原字符串不變

  • 示例

    String s = "abc";
    char[] arr = s.toCharArray(); // arr = {'a','b','c'}
    

5.?public String[] split(String regex)

  • 用法:根據傳入的正則表達式regex切割字符串,返回切割后的子字符串數組

  • 返回值String[]類型,即切割后的子字符串集合

  • 調用者String對象本身(如s.split(",")

  • 是否改變原對象:不改變。僅根據規則切割并生成新數組,原字符串不變

  • 注意

    • regex是正則表達式(如"\\."表示按點切割,需轉義)

    • 若切割后無內容,可能返回空數組或包含空字符串

  • 示例

    String s = "a,b,c";
    String[] parts = s.split(","); // parts = {"a","b","c"}
    

6.?public String substring(int begin, int end)

  • 用法:截取字符串中從begin索引(包含)到end索引(不包含)的子字符串,即范圍[begin, end)

  • 返回值String類型,即截取得到的新字符串

  • 調用者String對象本身(如s.substring(1,3)

  • 是否改變原對象:不改變。生成新的子字符串,原字符串不變

  • 注意:若beginend超出范圍,會拋出StringIndexOutOfBoundsException

  • 示例

    String s = "hello";
    String sub = s.substring(1,4); // sub = "ell"(索引1到3的字符:'e','l','l')
    

7.?public String substring(int begin)

  • 用法:從begin索引(包含)開始截取字符串,直到字符串末尾,即范圍[begin, length())

  • 返回值String類型,即截取得到的新字符串

  • 調用者String對象本身(如s.substring(2)

  • 是否改變原對象:不改變。生成新的子字符串,原字符串不變

  • 示例

    String s = "hello";
    String sub = s.substring(2); // sub = "llo"(從索引2到末尾的字符)
    

8.?public String replace(CharSequence target, CharSequence replacement)

  • 用法:將字符串中所有與target匹配的子序列,替換為replacement

  • 返回值String類型,即替換后的新字符串

  • 調用者String對象本身(如s.replace("a","b")

  • 是否改變原對象:不改變。生成替換后的新字符串,原字符串不變

  • 注意:替換所有匹配項(非首次匹配)

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

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

相關文章

超越相似名稱:Elasticsearch semantic text 如何在簡潔、高效、集成方面超越 OpenSearch semantic 字段

作者&#xff1a;來自 Elastic Mike Pellegrini, Nick Chow 及 Libby Lin 比較 Elasticsearch 語義文本和 OpenSearch 語義字段在簡潔性、可配置性和效率方面的表現。 自己動手體驗向量搜索&#xff0c;使用這個自定進度的 Search AI 實操學習。你現在可以開始免費的云試用&am…

OpenAI發布最新大模型GPT5、本地部署GPT開源模型

OpenAI發布最新大模型GPT5、本地部署GPT開源模型 GPT-5概述 北京時間 2025年8月8日 凌晨1點 OPENAI舉行了1個小時的線上發布會&#xff0c;正式推出了其史上最聰明、最強大的大模型GPT-5。 GPT-5是OpenAI發布的最新一代大型語言模型&#xff0c;它基于Transformer架構&#xff…

容器網絡模式選擇在云服務器多節點部署中的連通性驗證方案

容器網絡模式選擇在云服務器多節點部署中的連通性驗證方案在云計算環境中&#xff0c;容器網絡模式的選擇直接影響著多節點部署的通信效率和安全性。本文將從Docker原生網絡驅動對比入手&#xff0c;深入分析Overlay、Host、Bridge等主流網絡模式在跨主機通信場景下的性能表現&…

電商雙11美妝數據分析

1、數據初步了解2.數據清洗2.1 重復值處理 直接刪除重復值。2.2 缺失值處理通過上面觀察數據發現sale_count,comment_count 存在缺失值,先觀察存在缺失值的行的基本情況存在的缺失值很可能意味著售出的數量為0或者評論的數量為0&#xff0c;所以我們用0來填補缺失值。2.3 數據挖…

Pytest項目_day14(參數化、數據驅動)

parametrize 參數化可以組裝測試數據。在測試前定義好測試數據&#xff0c;并在測試用例中使用 單參數單次循環 我們可以在裝飾器中使用mark.parametrize&#xff0c;來定義參數名和參數值列表 參數名還需要傳給函數參數名需要用字符串來定義&#xff0c;參數值列表需要用可迭代…

Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot的異同相關概念

總述Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot 是分屬不同技術領域的工具&#xff0c;涵蓋前端框架、后端框架、數據庫工具等角色&#xff0c;它們在開發中既有功能交集&#xff0c;也有明確的定位差異。一、相同點服務端參與能力五者均能在服務端發揮作用&#xff1…

第2節 大模型分布式推理架構設計原則

大模型推理系統的設計過程,本質上是在多重約束下尋找最優解的過程。硬件資源的物理限制、場景對性能的剛性要求、系統的可擴展性需求,共同構成了設計的邊界條件。明確這些約束的具體表現形式,理解性能指標之間的權衡邏輯,確立架構設計的核心原則,是構建高效分布式推理系統…

快速部署一個鑒黃服務

1.安裝依賴pip install opennsfw22.代碼實現import opennsfw2 as n2# 將自動下載預訓練模型 open_nsfw_weights.h5 到 C:\Users\Administrator\.opennsfw2\weights # pip install opennsfw2# 單張預測 image_path 1.jpg nsfw_probability n2.predict_image(image_path) print…

Camera open failed

前言 由前面的幾篇博客可以知道&#xff0c;openCamera&#xff0c;createCaptureSession&#xff0c;setRepeatingRequest&#xff0c;capture是非常重要的過程&#xff0c;如果其中一個環節出了問題時該如何分析呢&#xff0c;這里我們首先從打開相機流程時&#xff0c;打開…

醫美產業科技成果展陳中心:連接微觀肌膚世界與前沿科技的橋梁

作為一名深耕展陳設計施工的從業者&#xff0c;當接到醫美產業科技成果展陳中心的項目時&#xff0c;我深知這不是簡單的 “技術堆砌”&#xff0c;而是要在 “科學嚴謹性” 與 “美學體驗感” 之間找到平衡 —— 讓參觀者既能看懂激光設備的波長原理&#xff0c;又能感知膠原蛋…

在 Android 系統中清理應用數據但保留應用程序本身,可以通過以下幾種方法實現

在 Android 系統中清理應用數據但保留應用程序本身&#xff0c;可以通過以下幾種方法實現在 Android 系統中清理應用數據但保留應用程序本身&#xff0c;可以通過以下幾種方法實現&#xff1a;方法 1: 使用 Android 設置&#xff08;無需 root&#xff09;方法 2: 使用 ADB 命令…

Linux中tty與8250-uart的虐戀(包括雙中斷發送接收機制)

串口通用驅動文件在哪里&#xff1f; drivers/tty/serial/哪一個是正確的compatible&#xff1f; arch/arm64/boot/dts/rockchip/rk3568.dtsi uart3: serialfe670000 {compatible "rockchip,rk3568-uart", "snps,dw-apb-uart";reg <0x0 0xfe670000 0…

GitHub 倉庫代碼上傳指南

文章目錄 ??? 一、環境準備 ?? 二、創建 GitHub 倉庫 ?? 三、本地代碼上傳流程 首次上傳 更新已有代碼 ?? 四、認證問題解決(必看!) 方案 1:個人訪問令牌(PAT) 方案 2:SSH 密鑰(推薦長期使用) ? 五、常見錯誤處理 ?? 六、最佳實踐建議 ?? 高級技巧 ??…

介紹一下 自動駕駛 感知多任務訓練模型設計

自動駕駛感知多任務訓練模型是指在一個統一的模型架構中&#xff0c;同時完成自動駕駛場景下的多個感知任務&#xff08;如目標檢測、語義分割、深度估計、車道線檢測等&#xff09;的模型設計。其核心目標是通過特征共享和任務協同&#xff0c;在提升單任務性能的同時&#xf…

huggingface文件下載過慢/中斷怎么辦

huggingface上匯集了各個大模型和預訓練模型的權重文件&#xff0c;但是訪問huggingface需要連接外網&#xff0c;即時連接外網之后下載仍然過慢甚至會出現中斷&#xff0c;因此本文將使用兩種方法教你解決上述問題。 文章目錄1.使用國內鏡像下載2.使用Python腳本自動化下載1.使…

Spring Boot + Redis Sentinel (一主兩從)測試案例

&#x1f680; Spring Boot Redis Sentinel 完整測試案例 &#x1f3f7;? 標簽&#xff1a;Redis 、Redis Sentinel、Spring Boot 實戰 &#x1f4da; 目錄導航 &#x1f4dd; 前言&#x1f3d7;? Redis Sentinel 架構說明&#x1f4e6; Docker Compose 搭建 Redis 哨兵環境…

力扣-295.數據流的中位數

題目鏈接 295.數據流的中位數 class MedianFinder {PriorityQueue<Integer> left;//隊頭最大PriorityQueue<Integer> right;//隊頭最小public MedianFinder() {left new PriorityQueue<>(new Comparator<Integer>() {Overridepublic int compare(In…

【數據分享】2014-2023年長江流域 (0.05度)5.5km分辨率的每小時日光誘導葉綠素熒光SIF數據

而今天要說明數據就是2014-2023年長江流域 &#xff08;0.05度&#xff09;5.5km分辨率的每小時日光誘導葉綠素熒光SIF數據。數據介紹一、數據集概況&#xff1a;長江流域植被動態的 “每小時快照”本文分享的核心數據集為2014 年 9 月至 2023 年 9 月長江流域日光誘導葉綠素熒…

計算機二級 Web —— HTML 全面精講(含真題實戰)

例題來源: web.code2ji.cn 0. HTML 基礎與全局常識 0.1 HTML 是什么 HTML&#xff08;HyperText Markup Language&#xff09;是網頁結構語言&#xff0c;用“標簽”描述內容、層次與含義。 0.2 基本文檔骨架&#xff08;必須熟練&#xff09; <!DOCTYPE html> <…

Linux中的日志管理

注&#xff1a;在 centos7/Rocky9 中&#xff0c;系統日志消息由兩個服務負責處理&#xff1a;systemd-journald 和 rsyslog一、常見日志文件的作用實驗一&#xff1a;測試查看暴力破解系統密碼的IP地址步驟一&#xff1a;故意輸錯密碼3次&#xff0c;在日志文件中查看步驟二&a…