網站首頁 編程語言 正文
String字符串的存儲原理
- 關于Java JDK中內置的一個類:java.lang.String
- String表示字符串類型,屬于引用數據類型。
- 在java中隨便使用雙引號括起來的都是String對象。例如:“abc”,“def“,“hello world!“。
- java中規定,雙引號括起來的字符串,是不可變的,也就是說”abc“自始至終不可變,不能變成”abcd”。
why 不可變?(重點知識)
源代碼中,String類中有一個byte[]數組,這個byte[]數組采用了final修飾,因為數組一旦創建長度不可變。并且被final修飾的引用一旦指向某個對象之后,不可再指向其它對象,所以string是不可變的!
“abc”無法變成“abcd"
- 在JDK當中雙引號括起來的字符串,例如:”abc”“def”都是直接存儲在“方法區"的“字符串常量池”當中的。
why 放在字符常量池中?(重點知識)
字符串在實際的開發中使用太頻繁。為了執行效率,所以把字符串放到了方法區的字符串常量池當中。
//這兩行代碼表示底層創建了3個字符串對象,都在字符串常量池當中。
String s1 = "abcdef";
String s2 ="abcdef" + "xy";
//凡是雙引號括起來的都在字符串常量池中有一份。
//new對象的時候一定在堆內存當中開辟空間。
String s3 = new String("xy");
String類常見的方法
- String s=new String(“”);
- String s=“";最常用
String s = new String("helloworld!");
System.out.println(s);
--------------------------------------------------------------
String s = "hello";
//默認調用toString()方法,因為System.out.println() + 對象
System.out.println(s);
String類的byte數組方法
- String s=new String(byte數組);
- String s= new String(byte數組,起始下標,長度)
byte[] bytes ={97,98,99};//97是a,98是b,99是c
String s2 = new String(bytes);
// 調用tostring()方法,默認Object的話,會自動輸出對象的內存地址。
// 通過輸出結果我們得出一個結論:String類已經重寫了tostring()方法。
// 輸出字符串對象的話,輸出的不是對象的內存地址,而是字符串本身。
System.out.println(s2.toString());//abc
System.out.println(s2); //abc
-------------------------------------------------------------
// String(字節數組,數組元素下標的起始位置,長度)
// 將byte數組中的一部分轉換成字符串。
String s3 = new String(bytes, offset: 1, length: 2);
System.out.println(s3);// bc
String類的char數組方法
- String s=new String(char數組);
- String s=new String(char數組,起始下標,長度);
//將char數組全部轉換成字符串
char[] chars={'我','是','中','國','人'};
String s4 = new String(chars);
System.out.println(s4);//我是中國人
-------------------------------------------------------------
//將char數組的一部分轉換成字符串
String s5 = new String(chars, offset: 2, count: 3);
System.out.println(s5);//中國人
String類的charAt(int index)方法
- 在括號中輸入數字,可以查找字符串的對應下標
//char charAt(int index)
char c = "123".charAt(2);//“123”是一個字符串對象,只要是對象就能點
System.out.println(c);//3
String類的compareTo(String anotherString)方法
- 字符串之間比較大小不能直接使用 > <,需要使用compareTo方法
//int compareTo(String anotherString)
int result = "abc".compareTo("abc");
System.out.println(result);//0(等于0)前后一致10-10=0
int result2 = "abcd".compareTo("abce");
System.out.println(result2);//-1(小于e)前小后大8-9=-1
int result3 = "abce".compareTo("abcd");
System.out.println(result3);//1大于0)前大后小9-8=1
//拿著字符串第一個字母和后面字符串的第一個字母比較。能分勝負就不再比較了。
System.out.println("xyz".compareTo("yxz")); // -1
String類的contains(CharSequence s)方法
- 判斷前面的字符串中是否包含后面的子字符串。
//booLean contains(CharSequence s)
System.out.println("Hellolorld.java".contains(".java")); // true
System.out.println("http://www.baidu.com".contains("https://")); // false
String類的endswith(String suffix)方法
- 判斷當前字符串是否以某個子字符串結尾。
//boolean endswith(String suffix)
System.out.println("test.txt".endsWith(".java")); // false
System.out.println("test.txt".endsWith(".txt")); // true
System.out.println("fdsajklfhdkjlsahfjkdsahjklfdss".endswith("ss"));// true
String類的equals(Object anObject)方法
- 比較兩個字符串必須使用equals方法,不能使用“=”
注意:調用equals方法時,若出現:
a.equals("123");
需將上面的代碼改成以下格式,以防空指針異常:"123".equals(a);
// boolean equals(Object anObject)
// equals只能看出相等不相等。
// compareTo方法可以看出是否相等,并且同時還可以看出誰大誰小。
System.out.println("abc".equals("abc")); // true
String類的equalsIgnareCase(String anotherString)方法
- 判斷兩個字符串是否相等,并且同時忽略大小寫。
//boolean equalsIgnareCase(String anotherString)
System.out.println("ABc".equalsIgnoreCase("abc")); // true
String類的getBytes()方法
- 將字符串對象轉換成字節數組
//byte[] getBytes()
byte[] bytes ="abcdef".getBytes();
for(int i = 0; i < bytes.length;i++)(
System.out.println(bytes[i]);//97 98 99 100 101 102
}
String類的indexOf(String str)方法
- 判斷某個子字符串在當前字符串中第一次出現處的索引(下標)
//int indexOf(String str)
System.out.println("oraclejavac++.netc#javaoraclec++".indexOf("java"));// 6
String類的isEmpty()方法
- 判斷某個字符串是否為“空字符串”
//boolean isEmpty()
//底層源代碼調用的應該是字符串的Length()方法。
String s ="";
System.out.println(s.isEmpty());//true
String s = "a";
System.out.println(s.isEmpty());//false
String類的Length()方法
- 判斷數組長度是Length屬性,判斷字符串長度是length()方法
//int Length()
System.out.println("abc".length()); // 3
System.out.println("".length()); // 0
String類的LastIndexof(String str)方法
- 判斷某個子字符串在當前字符串中最后一次出現的索引(下標)
//int LastIndexof(String str)
System.out.println("oraclejavac++javac#phpjavapython".lastIndexOf(str."java")); //22
String類的replace()方法
- 替換
//String replace(CharSequence target,CharSequence replacement)
//String的父接口就是:CharSequence
String newString = "http://www.baidu.com".replace( target: "http://", replacement: "https://");
System.out.println(newString);//https://ww.baidu.com
//把以下字符串中的“=”替換成“:”
String newString2 = "name=zhangsan&password=123&age=20".replace(target: "=", replacement: ":");
System.out.println(newString2); //name:zhangsan&password:123&age:20
String類的split(String regex)方法
- 拆分字符串
//String[] split(String regex)
String[] ymd = "1980-10-11".split(regex:"-");//“1980-10-11“以“-“分字符進行折分。
for(int i =0;i < ymd.length;i++){
System.out.println(ymd[i]);//1980 10 11
}
String param = "name=zhangsan&password=123&age=20";
String[] params = param.split( regex: "&");
for(int i = 0; i <params.length; i++){
System.out.println(params[i]);//name=zhangsan password=123 age=20
}
String類的startsWith(String prefix)方法 (掌握)
- 判斷某個字符串是否以某個子字符串開始
// boolean startswith(String prefix)
System.out.println("http://www.baidu.com".startsWith("http"));// true
System.out.println("http://www.baidu.com".startsWith("https"));// false
String類的substring(int beginIndex)方法
- 截取字符串
//String substring(int beginIndex)參數是起始下標。
System.out.println("http://www.baidu.com".substring(7)); //www.baidu.com
// String substring(int beginIndex,int endIndex)
// beginIndex起始位置(包括)
// endIndex結束位置(不包括),也就是從endIndex - 1的位置包括
System.out.println("http://www.baidu.com".substring(7, 10)); //www
String類的toCharArray()方法
- 將字符串轉換成char數組
//chap[] toCharArray()
char[]chars ="我是中國人".toCharArray();
for(int i = 0;i < chars.length;i++)
System.out.println(chars[i]);//我 是 中 國 人
}
String類的toLowerCase()方法 (掌握)
- 轉換為小寫
//String toLowerCase()
System.out.println("ABCDefKXyz".toLowerCase());//abcdefkxyz
String類的toUpper()方法 (掌握)
- 轉換為大寫
//String toUpperCase();
System.out.println("ABCDefKXyz".toUpperCase());//ABCDEFKXYZ
String類的trim()方法
- 去除字符串前后空白
//String trim();
System.out.println(" hello world ".trim());
String類的valueOf()方法
- 將“非字串”轉換成“字符串”
//String中只有一個方法是靜態的,不需要new對象
//這個方法叫做valueOf
String s1 = String.valueOf(true);//true
String s1 = String.valueOf(180);//180
String s1 = String.valueOf(3.14);//3.14
//這個靜態的valueOf()方法,參數是一個對象的時候,會自動調用該對象的toString()方法
String s1 = String.valueOf(new Customer());
//System.out.println(s1);//沒有重寫toString()方法之前是對象內存地址 com.bjpowernode.javase.
System.out.println(s1);//我是一個VIP客戶!!!
Object obj = new Object();
//通過源代碼可以看出:本質上System.out.println()這個方法在輸出任何數據的時候都是先轉換成字符串,再輸出。
//println調用valueOf調用toString
System.out.println(obj);
class Customer{
public String toString(){
return "我是一個VIP客戶!!!"
}
}
原文鏈接:https://blog.csdn.net/weixin_47957908/article/details/129843297
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-09-15 c語言實現數組循環左移m位_C 語言
- 2023-01-03 Kotlin中Lambda表達式與高階函數使用分析講解_Android
- 2022-12-22 數據清洗之如何用一行Python代碼去掉文本中的各種符號_python
- 2022-12-21 Android?O對后臺Service限制詳解_Android
- 2022-05-22 Nginx設置HTTPS的方法步驟_nginx
- 2022-07-02 C語言細致講解線程同步的集中方式_C 語言
- 2022-07-12 luckySheet在線編輯excel及遇到的問題
- 2022-12-01 Golang?編寫Tcp服務器的解決方案_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支