Java中的String類

目錄

1. String類的重要性

2. 常用方法

2.1 字符串構造

2.2 String對象的比較

2.3 字符串查找

2.4 轉化

2.5 字符串替換

2.6 字符串拆分

2.7 字符串截取

2.8 其他操作方法

2.9 字符串的不可變性

2.10 字符串修改

3. StringBuilder和StringBuffer

3.1 StringBuilder的介紹

3.2 面試題:

4. String類oj


正文開始

1. String類的重要性

在C語言中已經涉及到字符串了,但是在C語言中要表示字符串只能使用字符數組或者字符指針,可以使用標準庫提 供的字符串系列函數完成大部分操作,但是這種將數據和操作數據方法分離開的方式不符合面相對象的思想,而字 符串應用又非常廣泛,因此Java語言專門提供了String類。

在開發和校招筆試中,字符串也是常客,比如:

字符串轉整形數字

字符串相加

而且在面試中也頻繁被問到,比如:String、StringBuff和StringBulider之間的區別等。

2. 常用方法

2.1 字符串構造

String類提供的構造方式非常多,常用的就以下三種:

public static void main(String[] args) {
// 使用常量串構造
String s1 = "hello world";
System.out.println(s1);
// 直接newString對象
String s2 = new String("hello world");
System.out.println(s1);
// 使用字符數組進行構造
char[] array = {'h','e','l','l','w','o','r','l','d'};
String s3 = new String(array);
System.out.println(s1);
}

其他方法需要用到時,大家參考Java在線文檔:String官方文檔

【注意】

????????1. String是引用類型,內部并不存儲字符串本身,在String類的實現源碼中,String類實例變量如下:

?

public static void main(String[] args) {
// s1和s2引用的是不同對象 s1和s3引用的是同一對象
String s1 = new String("hello");
String s2 = new String("world");
String s3 = s1;
System.out.println(s1.length()); // 獲取字符串長度---輸出5
System.out.println(s1.isEmpty()); // 如果字符串長度為0,返回true,否則返回false
}

?????????2. 在Java中“”引起來的也是String類型對象。

// 打印"hello"字符串(String對象)的長度
System.out.println("hello".length());

2.2 String對象的比較

字符串的比較是常見操作之一,比如:字符串排序。Java中總共提供了4中方式:

1. ==比較是否引用同一個對象

注意:對于內置類型,==比較的是變量中的值;對于引用類型==比較的是引用中的地址。

public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;// 對于基本類型變量,==比較兩個變量中存儲的值是否相同
System.out.println(a == b); // false
System.out.println(a == c); // true// 對于引用類型變量,==比較兩個引用變量引用的是否為同一個對象
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // false
System.out.println(s1 == s4); // true
}

2. boolean equals(Object anObject) 方法:按照字典序比較

字典序:字符大小的順序 String類重寫了父類Object中equals方法,Object中equals默認按照==比較,String重寫equals方法后,按照 如下規則進行比較,比如: s1.equals(s2)

public boolean equals(Object anObject) {
// 1. 先檢測this 和 anObject 是否為同一個對象比較,如果是返回true
if (this == anObject) {
return true;
}
// 2. 檢測anObject是否為String類型的對象,如果是繼續比較,否則返回false
if (anObject instanceof String) {
// 將anObject向下轉型為String類型對象
String anotherString = (String)anObject;
int n = value.length;
// 3. this和anObject兩個字符串的長度是否相同,是繼續比較,否則返回false
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
// 4. 按照字典序,從前往后逐個字符進行比較
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("Hello");
// s1、s2、s3引用的是三個不同對象,因此==比較結果全部為false
System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false
// equals比較:String對象中的逐個字符
// 雖然s1與s2引用的不是同一個對象,但是兩個對象中放置的內容相同,因此輸出true
// s1與s3引用的不是同一個對象,而且兩個對象中內容也不同,因此輸出false
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
}
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("abc");String s4 = new String("abcdef");System.out.println(s1.compareTo(s2)); // 不同輸出字符差值-1System.out.println(s1.compareTo(s3)); // 相同輸出 0System.out.println(s1.compareTo(s4)); // 前k個字符完全相同,輸出長度差值 -3
}
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("ABc");String s4 = new String("abcdef");System.out.println(s1.compareToIgnoreCase(s2)); // 不同輸出字符差值-1System.out.println(s1.compareToIgnoreCase(s3)); // 相同輸出 0System.out.println(s1.compareToIgnoreCase(s4)); // 前k個字符完全相同,輸出長度差值 -3
}
比

3. int compareTo(String s) 方法: 按照字典序進行比較

與equals不同的是,equals返回的是boolean類型,而compareTo返回的是int類型。具體比較方式:

1. 先按照字典次序大小比較,如果出現不等的字符,直接返回這兩個字符的大小差值

2. 如果前k個字符相等(k為兩個字符長度最小值),返回值兩個字符串長度差值

public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("abc");
String s4 = new String("abcdef");
System.out.println(s1.compareTo(s2)); // 不同輸出字符差值-1
System.out.println(s1.compareTo(s3)); // 相同輸出 0
System.out.println(s1.compareTo(s4)); // 前k個字符完全相同,輸出長度差值 -3
}

4. int compareToIgnoreCase(String str) 方法:與compareTo方式相同,但是忽略大小寫比較

public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("ABc");String s4 = new String("abcdef");System.out.println(s1.compareToIgnoreCase(s2)); // 不同輸出字符差值-1System.out.println(s1.compareToIgnoreCase(s3)); // 相同輸出 0System.out.println(s1.compareToIgnoreCase(s4)); // 前k個字符完全相同,輸出長度差值 -3
}

2.3 字符串查找

字符串查找也是字符串中非常常見的操作,String類提供的常用查找的方法:

?

public static void main(String[] args) {String s = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3)); // 'b'System.out.println(s.indexOf('c')); // 6System.out.println(s.indexOf('c', 10)); // 15System.out.println(s.indexOf("bbb")); // 3System.out.println(s.indexOf("bbb", 10)); // 12System.out.println(s.lastIndexOf('c')); // 17System.out.println(s.lastIndexOf('c', 10)); // 8System.out.println(s.lastIndexOf("bbb")); // 12System.out.println(s.lastIndexOf("bbb", 10)); // 3
}

注意:上述方法都是實例方法。

2.4 轉化

1. 數值和字符串轉化

public static void main(String[] args) {
// 數字轉字符串
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
System.out.println("=================================");
// 字符串轉數字
// 注意:Integer、Double等是Java中的包裝類型
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);
System.out.println(data2);
}

2. 大小寫轉換

public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO";
// 小寫轉大寫
System.out.println(s1.toUpperCase());
// 大寫轉小寫
System.out.println(s2.toLowerCase());
}

3. 字符串轉數組

public static void main(String[] args) {
String s = "hello";
// 字符串轉數組
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
}
System.out.println();
// 數組轉字符串
String s2 = new String(ch);
System.out.println(s2);
}

4. 格式化

public static void main(String[] args) {
String s = String.format("%d-%d-%d", 2019, 9,14);
System.out.println(s);
}

2.5 字符串替換

使用一個指定的新的字符串替換掉已有的字符串數據,可用的方法如下:

?代碼示例: 字符串的替換處理

String str = "helloworld" ;
System.out.println(str.replaceAll("l", "_"));
System.out.println(str.replaceFirst("l", "_"));

注意事項: 由于字符串是不可變對象, 替換不修改當前字符串, 而是產生一個新的字符串.

2.6 字符串拆分

可以將一個完整的字符串按照指定的分隔符劃分為若干個子字符串。

可用方法如下:

?代碼示例: 實現字符串的拆分處理

String str = "hello world hello java" ;
String[] result = str.split(" ") ; // 按照空格拆分
for(String s: result) {
System.out.println(s);
}

代碼示例: 字符串的部分拆分

String str = "hello world hello bit" ;
String[] result = str.split(" ",2) ;
for(String s: result) {
System.out.println(s);
}

拆分是特別常用的操作. 一定要重點掌握. 另外有些特殊字符作為分割符可能無法正確切分, 需要加上轉義.

代碼示例: 拆分IP地址

String str = "192.168.1.1" ;
String[] result = str.split("\\.") ;
for(String s: result) {System.out.println(s);
}

注意事項:

????????1. 字符"|","*","+"都得加上轉義字符,前面加上 "\\" .

????????2. 而如果是 "\" ,那么就得寫成 "\\\\" .

????????3. 如果一個字符串中有多個分隔符,可以用"|"作為連字符.

代碼示例: 多次拆分

String str = "name=zhangsan&age=18" ;
String[] result = str.split("&") ;
for (int i = 0; i < result.length; i++) {String[] temp = result[i].split("=") ;System.out.println(temp[0]+" = "+temp[1]);
}

這種代碼在以后的開發之中會經常出現

2.7 字符串截取

從一個完整的字符串之中截取出部分內容。可用方法如下:

?代碼示例: 觀察字符串截取

String str = "helloworld" ;
System.out.println(str.substring(5));
System.out.println(str.substring(0, 5));

注意事項:

1. 索引從0開始

2. 注意前閉后開區間的寫法, substring(0, 5) 表示包含 0 號下標的字符, 不包含 5 號下標

2.8 其他操作方法

?代碼示例: 觀察trim()方法的使用

String str = " hello world " ;
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]");

trim 會去掉字符串開頭和結尾的空白字符(空格, 換行, 制表符等).

代碼示例: 大小寫轉換

String str = " hello%$$%@#$%world 哈哈哈 " ;
System.out.println(str.toUpperCase());
System.out.println(str.toLowerCase());

這兩個函數只轉換字母

2.9 字符串的不可變性

String是一種不可變對象. 字符串中的內容是不可改變。字符串不可被修改,是因為:

1. String類在設計時就是不可改變的,String類實現描述中已經說明了

以下來自JDK1.8中String類的部分實現:

?String類中的字符實際保存在內部維護的value字符數組中,該圖還可以看出:

????????1. String類被final修飾,表明該類不能被繼承

????????2. value被修飾被final修飾,表明value自身的值不能改變,即不能引用其它字符數組,但是其引用空間中 的內容可以修改。

2. 所有涉及到可能修改字符串內容的操作都是創建一個新對象,改變的是新對象

【糾正】網上有些人說:字符串不可變是因為其內部保存字符的數組被final修飾了,因此不能改變。 這種說法是錯誤的,不是因為String類自身,或者其內部value被final修飾而不能被修改。

final修飾類表明該類不想被繼承,final修飾引用類型表明該引用變量不能引用其他對象,但是其引用對象中的內 容是可以修改的。

public static void main(String[] args) {
final int array[] = {1,2,3,4,5};
array[0] = 100;
System.out.println(Arrays.toString(array));
// array = new int[]{4,5,6}; // 編譯報錯:Error:(19, 9) java: 無法為最終變量array分配值
}

2.10 字符串修改

注意:盡量避免直接對String類型對象進行修改,因為String類是不能修改的,所有的修改都會創建新對象,效率 非常低下。

public static void main(String[] args) {
String s = "hello";
s += " world";
System.out.println(s); // 輸出:hello world
}

但是這種方式不推薦使用,因為其效率非常低,中間創建了好多臨時對象。

public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "";
for(int i = 0; i < 10000; ++i){
s += i;
}
long end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer("");
for(int i = 0; i < 10000; ++i){
sbf.append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
StringBuilder sbd = new StringBuilder();
for(int i = 0; i < 10000; ++i){
sbd.append(i);
}
end = System.currentTimeMillis();
System.out.println(end - start);
}

可以看待在對String類進行修改時,效率是非常慢的,因此:盡量避免對String的直接需要,如果要修改建議盡量 使用StringBuffer或者StringBuilder。

b. 借助StringBuffer 和 StringBuilder

3. StringBuilder和StringBuffer

3.1 StringBuilder的介紹

由于String的不可更改特性,為了方便字符串的修改,Java中又提供StringBuilder和StringBuffer類。這兩個類大 部分功能是相同的,這里介紹 StringBuilder常用的一些方法,其它需要用到了大家可參閱 StringBuilder在線文檔

public static void main(String[] args) {StringBuilder sb1 = new StringBuilder("hello");StringBuilder sb2 = sb1;// 追加:即尾插-->字符、字符串、整形數字sb1.append(' '); // hellosb1.append("world"); // hello worldsb1.append(123); // hello world123System.out.println(sb1); // hello world123System.out.println(sb1 == sb2); // trueSystem.out.println(sb1.charAt(0)); // 獲取0號位上的字符 hSystem.out.println(sb1.length()); // 獲取字符串的有效長度14System.out.println(sb1.capacity()); // 獲取底層數組的總大小sb1.setCharAt(0, 'H'); // 設置任意位置的字符 Hello world123sb1.insert(0, "Hello world!!!"); // Hello world!!!Hello world123System.out.println(sb1);System.out.println(sb1.indexOf("Hello")); // 獲取Hello第一次出現的位置System.out.println(sb1.lastIndexOf("hello")); // 獲取hello最后一次出現的位置sb1.deleteCharAt(0); // 刪除首字符sb1.delete(0,5); // 刪除[0, 5)范圍內的字符String str = sb1.substring(0, 5); // 截取[0, 5)區間中的字符以String的方式返回System.out.println(str);sb1.reverse(); // 字符串逆轉str = sb1.toString(); // 將StringBuffer以String的方式返回System.out.println(str);
}

?從上述例子可以看出:String和StringBuilder最大的區別在于String的內容無法修改,而StringBuilder的內容可 以修改。頻繁修改字符串的情況考慮使用StringBuilder。

注意:String和StringBuilder類不能直接轉換。如果要想互相轉換,可以采用如下原則:

? ? ? ?1. String變為StringBuilder: 利用StringBuilder的構造方法或append()方法

? ? ? ? 2.StringBuilder變為String: 調用toString()方法。

3.2 面試題:

1. String、StringBuffer、StringBuilder的區別

String的內容不可修改,StringBuffer與StringBuilder的內容可以修改. StringBuffer與StringBuilder大部分功能是相似的 StringBuffer采用同步處理,屬于線程安全操作;而StringBuilder未采用同步處理,屬于線程不安全操 作

2. 以下總共創建了多少個String對象【前提不考慮常量池之前是否存在】

String str = new String("ab"); // 會創建多少個對象
String str = new String("a") + new String("b"); // 會創建多少個對象

4. String類oj

1.第一個只出現一次的字符

class Solution {public int firstUniqChar(String s) {int[] count = new int[256];// 統計每個字符出現的次數for(int i = 0; i < s.length(); ++i){count[s.charAt(i)]++;}// 找第一個只出現一次的字符for(int i = 0; i < s.length(); ++i){if(1 == count[s.charAt(i)]){return i;}}return -1;}
}

2. 最后一個單詞的長度

import java.util.Scanner;public class Main{public static void main(String[] args){// 循環輸入Scanner sc = new Scanner(System.in);while(sc.hasNext()){// 獲取一行單詞String s = sc.nextLine();// 1. 找到最后一個空格// 2. 獲取最后一個單詞:從最后一個空格+1位置開始,一直截取到末尾// 3. 打印最后一個單詞長度int len = s.substring(s.lastIndexOf(' ')+1, s.length()).length();System.out.println(len);}sc.close();}
}

3. 檢測字符串是否為回文

class Solution {public boolean isPalindrome(String s){s = s.toLowerCase();int left = 0;int right = s.length()-1;while (left < right){while (left < right && !isNumberAndCharacter(s.charAt(left))){left++;}while (left < right && !isNumberAndCharacter(s.charAt(right))){right--;}if(s.charAt(left) == s.charAt(right)){left++;right--;}else {return false;}}return true;}private boolean isNumberAndCharacter(char ch){if (Character.isDigit(ch) || Character.isLetter(ch)){return true;}return false;}}

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

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

相關文章

深度分頁介紹及優化建議

深度分頁介紹 查詢偏移量過大的場景我們稱為深度分頁&#xff0c;這會導致查詢性能較低&#xff0c;例如&#xff1a; # MySQL 在無法利用索引的情況下跳過1000000條記錄后&#xff0c;再獲取10條記錄 SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10 深度分頁問題的原…

live555推流服務器異常

1.后端異常信息&#xff1a; MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (100176). 48899 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least m…

每日OJ_牛客_宵暗的妖怪_DP_C++_Java

目錄 牛客_宵暗的妖怪_DP 題目解析 C代碼 Java代碼 牛客_宵暗的妖怪_DP 宵暗的妖怪 描述&#xff1a; 露米婭作為宵暗的妖怪&#xff0c;非常喜歡吞噬黑暗。這天&#xff0c;她來到了一條路上&#xff0c;準備吞噬這條路上的黑暗。這條道路一共被分為n 部分&…

20250306-筆記-精讀class CVRPEnv:step(self, selected)

文章目錄 前言一、if self.time_step<4:控制時間步的遞增判斷是否在配送中心特定時間步的操作更新更新當前節點和已選擇節點列表更新需求和負載更新訪問標記更新負無窮掩碼更新步驟狀態&#xff0c;將更新后的狀態同步到 self.step_state 二、使用步驟總結 前言 class CVRP…

Flowable 基本入門

flowable.7z官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤 1、Flowable介紹 Flowable是BPMN的一個基于java的軟件實現&#xff0c;不過Flowable不僅僅包括BPMN&#xff0c;還有DMN決策表和CMMN Case管理引擎&#xff0c;并且有自己的用戶管理、微服務API等一系列功能&a…

完全背包-一維數組

52. 攜帶研究材料&#xff08;第七期模擬筆試&#xff09; 題目描述 小明是一位科學家&#xff0c;他需要參加一場重要的國際科學大會&#xff0c;以展示自己的最新研究成果。他需要帶一些研究材料&#xff0c;但是他的行李箱空間有限。這些研究材料包括實驗設備、文獻資料和…

景聯文科技:以專業標注賦能AI未來,驅動智能時代的精準躍遷

在人工智能技術重塑全球產業格局的今天&#xff0c;高質量訓練數據已成為驅動算法進化的核心燃料。作為數據智能服務領域的領軍者&#xff0c;景聯文科技深耕數據標注行業多年&#xff0c;以全棧式數據解決方案為核心&#xff0c;構建起覆蓋數據采集、清洗、標注、質檢及算法調…

洛谷B2074 計算星期幾

B2074 計算星期幾 - 洛谷 代碼區&#xff1a; #include<algorithm> #include<iostream> #include<unordered_map> #include<string> using namespace std; int main() {unordered_map<int, string> m { { 1,"Monday" },{2,"Tue…

協同過濾推薦算法+微信小程序的農產品團購推薦平臺(程序+論文+講解+安裝+調試+售后)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統介紹 在當今時代&#xff0c;科學技術正以令人矚目的速度迅猛進步&#xff0c;經濟社會也隨之…

十大經典排序算法簡介

一 概述 本文對十大經典排序算法做簡要的總結(按常用分類方式排列),包含核心思想、時間/空間復雜度及特點。 二、比較類排序 1. 冒泡排序 (BUBBLE SORT) 思想:重復交換相鄰逆序元素,像氣泡上浮 復雜度: 時間:O(n^2)(最好情況O(n)) 空間:O(1) 特點:簡單但效率低,穩…

[自然語言處理]pytorch概述--什么是張量(Tensor)和基本操作

pytorch概述 PyTorch 是?個開源的深度學習框架&#xff0c;由 Facebook 的??智能研究團隊開發和維護&#xff0c;于2017年在GitHub上開源&#xff0c;在學術界和?業界都得到了?泛應? pytorch能做什么 GPU加速自動求導常用網絡層 pytorch基礎 量的概念 標量&#xf…

Spring統一格式返回

目錄 一&#xff1a;統一結果返回 1&#xff1a;統一結果返回寫法 2&#xff1a;String類型報錯問題 解決方法 二&#xff1a;統一異常返回 統一異常返回寫法 三&#xff1a;總結 同志們&#xff0c;今天咱來講一講統一格式返回啊&#xff0c;也是好久沒有講過統一格式返…

【無標題】四色拓撲模型與宇宙歷史重構的猜想框架

### 四色拓撲模型與宇宙歷史重構的猜想框架 --- #### **一、理論基礎&#xff1a;四色拓撲與時空全息原理的融合** 1. **宇宙背景信息的拓撲編碼** - **大尺度結構網絡**&#xff1a;將星系團映射為四色頂點&#xff0c;纖維狀暗物質結構作為邊&#xff0c;構建宇宙尺度…

藍橋杯 封閉圖形個數

藍橋杯 封閉圖形個數 題目 鏈接 解答 # 數字個數 n int(input()) # 數字 ls input().split() # 統計數字的圈數 o_nums {} for i, x in enumerate(ls):o_num 0for c in x:if int(c) in [0, 4, 6, 9]:o_num 1elif c 8:o_num 2o_nums[i] o_num # 字典根據圓圈數排序 …

基于javaweb的SpringBoot學生在線考試管理系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

國產編輯器EverEdit - 超多樣式設置

1 設置-編輯-樣式 1.1 設置說明 1.1.1 折疊樣式 默認為箭頭&#xff0c;折疊樣式選項如下&#xff1a; 箭頭&#xff1a; 矩形和線條 五邊形 圓形圖標 1.1.2 光標樣式 光標用于指示當前用戶輸入位置&#xff0c;光標樣式選項如下&#xff1a; 默認 纖細 字寬 …

Linux - 線程控制

一、線程概念 1&#xff09;線程地址空間 線程與進程共享相同的虛擬地址空間&#xff0c;因此線程在訪問內存時與進程沒有本質的區別。但線程共享和獨占的內存區域有不同的特點&#xff0c;理解這些特性對于正確使用線程至關重要。 1. 線程地址空間的組成 線程的地址空間是…

通過多線程分別獲取高分辨率和低分辨率的H264碼流

目錄 一.RV1126 VI采集攝像頭數據并同時獲取高分辨率碼流和低分辨率碼流流程 ?編輯 1.1初始化VI模塊&#xff1a; 1.2初始化RGA模塊&#xff1a; 1.3初始化高分辨率VENC編碼器、 低分辨率VENC編碼器&#xff1a; 1.4 VI綁定高分辨率VENC編碼器&#xff0c;VI綁定RGA模塊…

部署RabbitMQ集群詳細教程

部署RabbitMQ集群詳細教程 下面是一份在 Ubuntu 環境下部署 RabbitMQ 集群的詳細步驟說明&#xff0c;涉及主機名設置、Erlang & RabbitMQ 安裝、管理插件啟用、集群通信 Cookie 配置、節點加入集群、鏡像隊列策略設置以及集群驗證等。為了演示方便&#xff0c;以下示例假…

【Linux】之【Bug】VMware 虛擬機開機 一直卡在黑屏左上角下劃線閃爍界面

解決 參考&#xff1a; 解決Ubuntu20.04 開機黑屏光標閃爍進不去系統 Centos根目錄100%解決思路 當前界面 ctrlaltf3-f6 暫時進入終端界面 df -h 查看發現根目錄 磁盤空間已滿 執行命令 查看當前目錄占用內存明細 sudo du -h -x --max-depth1清理無用的大內存文件 或者安裝…