Java基礎——String

来源:https://www.cnblogs.com/guojia314/archive/2018/09/04/9582014.html
-Advertisement-
Play Games

前言 從去年八月末開始工作一年了,有了大半年的java開發經驗,自認為比在大學時候編碼能力強了很多,但是基礎方面叫不准的地方感覺越來越多了 (;´д`)ゞ 所以,我準備把這些問題以及工作中遇到的問題總結,記錄下來,造福自己和大家~ヾ(o・ω・)ノ 當然,如果大家發現我哪裡寫的有錯誤,歡迎在下方評論指 ...


前言

  從去年八月末開始工作一年了,有了大半年的java開發經驗,自認為比在大學時期編碼能強了很多,但是基礎方面概念模糊的地方感覺越來越多了 (;´д`)ゞ

所以,我準備把這些問題以及工作中遇到的問題總結,記錄下來,造福自己和大家~ヾ(o・ω・)ノ   當然,如果大家發現我哪裡寫的有錯誤,歡迎在下方評論指出來。

那我們開始吧!

 

String

  1.String是一個final類,不能被繼承

  2.String底層維護是一個數組,靜態創造一個字元串時,此字元串存在於String池,當下一個String對象也是靜態創建的時候,先去String池裡找是否有和新對象一樣的,

如果有,指向新對象,否則創建新對象。

  下麵內容引用 https://blog.csdn.net/weixin_38722500/article/details/81134952 以解釋第二條

  (1)

1 String str1 = "abc"; 
2 System.out.println(str1 == "abc"); 

  步驟:

  1)棧中開闢一塊空間存放引用str1

  2)String池中開闢一塊空間,存放String常量"abc"

  3)引用str1指向池中String常量"abc"

  4)str1所指代地址即常量"abc"所在地址,輸出為true

  (2)

1 String str2 = new String("abc"); 
2 System.out.println(str2 == "abc"); 

  步驟:

  1)棧中開闢一塊空間存放引用str2

  2)堆中開闢一塊空間存放一個新建的String對象"abc" 

  3)引用str2指向堆中的新建的String對象"abc" 

  4)str2所指代地址即常量"abc"所在地址,而常量"abc"地址在池中,輸出為false 

  (3)

1 String str3 = new String("abc"); 
2 System.out.println(str3 == str2); 

  步驟:

  1)棧中開闢一塊空間存放引用str3

  2)堆中開闢一塊新空間存放另外一個(不同於str2所指)新建的String對象

  3)引用str3指向另外新建的那個String對象 

  4)str3和str2指向堆中不同的String對象,地址也不相同,輸出為false 

  (4)

1 String str4 = "a" + "b"; 
2 System.out.println(str4 == "ab"); 

  步驟:

  1)棧中開闢一塊空間存放引用str3

  2)根據編譯器合併已知量的優化功能,池中開闢一塊空間,存放合併後的String常量"ab" 

  3)引用str4指向池中常量"ab"

  4)str4所指即池中常量"ab",輸出為true 

  (5)

1 final String s = "a"; 
2 String str5 = s + "b"; 
3 System.out.println(str5 == "ab"); 

  同(4)

  (6)

1 String s1 = "a"; 
2 String s2 = "b"; 
3 String str6 = s1 + s2; 
4 System.out.println(str6 == "ab"); 

  步驟:

  1)棧中開闢一塊空間存放引用s1,s1指向池中String常量"a"

  2)棧中開闢一塊空間存放引用s2,s2指向池中String常量"b"

  3)棧中開闢一塊空間存放引用str5

  4)s1 + s2通過StringBuilder的最後一步toString()方法還原一個新的String對象"ab",因此堆中開闢一塊空間存放此對象

  5)  引用str6指向堆中(s1 + s2)所還原的新String對象

  6)  str6指向的對象在堆中,而常量"ab"在池中,輸出為false 

  (7)

1 String str7 = "abc".substring(0, 2); 

  步驟:

  1)棧中開闢一塊空間存放str7

  2)substring()方法還原一個新的String對象"ab"(不同於str6所指),堆中開闢一塊空間存放此對象

  3)引用str7指向堆中的新String對象

     (8)

1  String str8 = "abc".toUpperCase(); 

  步驟:

  1)棧中開闢一塊空間存放str8

  2)toUpperCase()方法還原一個新的String對象"ABC",池中並未開闢新的空間存放String常量"ABC" 

  3)引用str8指向堆中的新String對象

  

  呼,這部分終於結束了,我們繼續(ง •̀_•́)ง 

  3.幾個常用方法:

 1 //1.charAt()方法:根據下標返回對應字元
 2 char c = str.charAt(2);
 3 System.out.println(c);
 4 
 5 //2.substring()方法:截取字元串
 6 1<=string<4  (左邊包含右邊不包含)
 7 String s = "abcde";
 8 String s1= s.substring(1,4);
 9 System.out.println(s1);
10 
11 //3.toUpperCase():變大寫 toLowerCase():變小寫
12 String s = "aBc";
13 System.out.println(s.toUpperCase());
14 System.out.println(s.toLowerCase());
15 
16 //4.trim():去除字元串兩邊空格
17 String s1 = "   abcde             ";
18 String s2 = s1.trim();
19 System.out.println(s2.length);
20 System.out.println(s1.length);
21 System.out.println(s1.charAt(0));
22 
23 //5.indexOf():搜索指定字元串,如果能找到返回起始下標,
24 //找不到返回-1 , 不可以隔著查  如搜索bd  會返回-1
25 String s = "abcde";
26 int a = s.indexOf("bc");
27 System.out.println(a);
28          
29 //6.startsWith():判斷是否以某字元串開頭
30 //endsWith():判斷是否以某字元串結尾
31 String s = "abcde";
32 boolean a = s.startsWith("ab");
33 boolean b = s.endsWith("de");
34 System.out.println(a);
35 System.out.println(b);
36 
37 //7.字元串有兩種創建方法
38 //字面值賦值:字元串使用頻率 太高,java對String做了優化   
39 //建議這樣:
40 Sting s1 = "abc";
41 //不建議new關鍵字創建:
42 String s2 = new String("abc");
43          
44 //8.判斷字元串相等的方法
45 boolean boo = s1.equals(s2);
46 System.out.println(boo);
47          
48 //9. = , == , equald的區別:         
49 //   =  :賦值
50 //   == :比較對象是否相同
51 //   equals :比較兩個對象內容是否相同 

 

  4.String ,StringBuffer 以及 StringBuilder區別:
   1)String長度不可以改變
   2)StringBuffer和StringBuilder長度可以改變
   3)StringBuffer線程安全,執行效率低
   4)StringBuilder線程不安全,執行效率高

 

 好了! 以上就是目前我在String方面概念模糊的地方了!希望能夠幫到大家!
 我們下期再見!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求: 利用MySql資料庫結合前端技術完成用戶的註冊(要求不使用Web服務技術),所以 Demo採用Socket技術實現Web通信. 第一部分:資料庫創建 資料庫採用mysql 5.7.18, 資料庫名稱為MyUser, 內部有一張表 user.欄位有 Id,UserName,Psd,Tel 第二 ...
  • 1、event.stopPropagation 停止事件的傳播,阻止它被分配到其它Dom節點。但是不能阻止同一Dom節點上的其它事件句柄被調用。 2、event.preventDefault 阻止與事件關聯的預設動作。 ...
  • 本文轉自:http://developer.51cto.com/art/201709/552085.htm 本文轉自:https://www.cnblogs.com/stulzq/p/8573828.html 微服務架構現在是談到企業應用架構時必聊的話題,微服務之所以火熱也是因為相對之前的應用開發方 ...
  • 不管乾什麼,設定一個目標,針對一個目標有一個核心戰略,並堅決的執行核心戰略是取得勝利的不二法寶。 舉個慄子🌰: 三國三分天下。魏蜀吳都有自己的階段性核心戰略。魏國曹操的戰略是挾天子以令諸侯。東吳孫權的戰略是依靠天險,有水做天然屏障,孫吳水師一家獨大。蜀國的戰略是東聯孫權,北拒曹操。 魏國和吳國的執 ...
  • 前言 剛從事開發那段時間不習慣輸出日誌,認為那是無用功,徒增代碼量,總認為自己的代碼無懈可擊;老大的叮囑、強調也都視為耳旁風,最終導致的結果是我加班排查問題,花的時間還挺長的,要復現問題、排查問題等,幸虧那是公司內部員工用的系統,時間長一點也沒什麼大問題,但是如果是針對客戶的,時間就代表很多東西了, ...
  • c++ move關鍵字 move的由來:在 c++11 以前存在一個有趣的現象:T& 指向 lvalue (左傳引用), const T& 既可以指向 lvalue 也可以指向 rvalue。但卻沒有一種引用類型,可以限製為只指向 rvalue。 就這麼簡單!你甚至可以暫時想像它的原型是這樣的(當然 ...
  • 定義用戶去銀行存錢,每次存100,存3次 餓漢式 懶漢式 多線程 在同一時間,做多件事情. 創建線程的方法 繼承類Thread並重寫run(),run()稱為線程體;用這種方法定義的類不能再繼承其他類。 class FirstThread extends Thread{ public void ru ...
  • 常量池: 字元串一旦被初始化就不會被改變 這段代碼看上去s的值是被改變了的,實際上123就是一個對象,他存在於常量池中,abc也是一個對象,s的值實際上是指向123或者abc的地址。 所以當我們使用String s="123";來定義字元串的時候,會先查看常量池中是否有123,有就直接賦值123的地 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...