網(wǎng)站首頁 編程語言 正文
String字符串的存儲原理
- 關(guān)于Java JDK中內(nèi)置的一個類:java.lang.String
- String表示字符串類型,屬于引用數(shù)據(jù)類型。
- 在java中隨便使用雙引號括起來的都是String對象。例如:“abc”,“def“,“hello world!“。
- java中規(guī)定,雙引號括起來的字符串,是不可變的,也就是說”abc“自始至終不可變,不能變成”abcd”。
why 不可變?(重點知識)
源代碼中,String類中有一個byte[]數(shù)組,這個byte[]數(shù)組采用了final修飾,因為數(shù)組一旦創(chuàng)建長度不可變。并且被final修飾的引用一旦指向某個對象之后,不可再指向其它對象,所以string是不可變的!
“abc”無法變成“abcd"
- 在JDK當中雙引號括起來的字符串,例如:”abc”“def”都是直接存儲在“方法區(qū)"的“字符串常量池”當中的。
why 放在字符常量池中?(重點知識)
字符串在實際的開發(fā)中使用太頻繁。為了執(zhí)行效率,所以把字符串放到了方法區(qū)的字符串常量池當中。
//這兩行代碼表示底層創(chuàng)建了3個字符串對象,都在字符串常量池當中。
String s1 = "abcdef";
String s2 ="abcdef" + "xy";
//凡是雙引號括起來的都在字符串常量池中有一份。
//new對象的時候一定在堆內(nèi)存當中開辟空間。
String s3 = new String("xy");
String類常見的方法
- String s=new String(“”);
- String s=“";最常用
String s = new String("helloworld!");
System.out.println(s);
--------------------------------------------------------------
String s = "hello";
//默認調(diào)用toString()方法,因為System.out.println() + 對象
System.out.println(s);
String類的byte數(shù)組方法
- String s=new String(byte數(shù)組);
- String s= new String(byte數(shù)組,起始下標,長度)
byte[] bytes ={97,98,99};//97是a,98是b,99是c
String s2 = new String(bytes);
// 調(diào)用tostring()方法,默認Object的話,會自動輸出對象的內(nèi)存地址。
// 通過輸出結(jié)果我們得出一個結(jié)論:String類已經(jīng)重寫了tostring()方法。
// 輸出字符串對象的話,輸出的不是對象的內(nèi)存地址,而是字符串本身。
System.out.println(s2.toString());//abc
System.out.println(s2); //abc
-------------------------------------------------------------
// String(字節(jié)數(shù)組,數(shù)組元素下標的起始位置,長度)
// 將byte數(shù)組中的一部分轉(zhuǎn)換成字符串。
String s3 = new String(bytes, offset: 1, length: 2);
System.out.println(s3);// bc
String類的char數(shù)組方法
- String s=new String(char數(shù)組);
- String s=new String(char數(shù)組,起始下標,長度);
//將char數(shù)組全部轉(zhuǎn)換成字符串
char[] chars={'我','是','中','國','人'};
String s4 = new String(chars);
System.out.println(s4);//我是中國人
-------------------------------------------------------------
//將char數(shù)組的一部分轉(zhuǎn)換成字符串
String s5 = new String(chars, offset: 2, count: 3);
System.out.println(s5);//中國人
String類的charAt(int index)方法
- 在括號中輸入數(shù)字,可以查找字符串的對應(yīng)下標
//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)方法
- 判斷當前字符串是否以某個子字符串結(jié)尾。
//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方法,不能使用“=”
注意:調(diào)用equals方法時,若出現(xiàn):
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()方法
- 將字符串對象轉(zhuǎn)換成字節(jié)數(shù)組
//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)方法
- 判斷某個子字符串在當前字符串中第一次出現(xiàn)處的索引(下標)
//int indexOf(String str)
System.out.println("oraclejavac++.netc#javaoraclec++".indexOf("java"));// 6
String類的isEmpty()方法
- 判斷某個字符串是否為“空字符串”
//boolean isEmpty()
//底層源代碼調(diào)用的應(yīng)該是字符串的Length()方法。
String s ="";
System.out.println(s.isEmpty());//true
String s = "a";
System.out.println(s.isEmpty());//false
String類的Length()方法
- 判斷數(shù)組長度是Length屬性,判斷字符串長度是length()方法
//int Length()
System.out.println("abc".length()); // 3
System.out.println("".length()); // 0
String類的LastIndexof(String str)方法
- 判斷某個子字符串在當前字符串中最后一次出現(xiàn)的索引(下標)
//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)參數(shù)是起始下標。
System.out.println("http://www.baidu.com".substring(7)); //www.baidu.com
// String substring(int beginIndex,int endIndex)
// beginIndex起始位置(包括)
// endIndex結(jié)束位置(不包括),也就是從endIndex - 1的位置包括
System.out.println("http://www.baidu.com".substring(7, 10)); //www
String類的toCharArray()方法
- 將字符串轉(zhuǎn)換成char數(shù)組
//chap[] toCharArray()
char[]chars ="我是中國人".toCharArray();
for(int i = 0;i < chars.length;i++)
System.out.println(chars[i]);//我 是 中 國 人
}
String類的toLowerCase()方法 (掌握)
- 轉(zhuǎn)換為小寫
//String toLowerCase()
System.out.println("ABCDefKXyz".toLowerCase());//abcdefkxyz
String類的toUpper()方法 (掌握)
- 轉(zhuǎn)換為大寫
//String toUpperCase();
System.out.println("ABCDefKXyz".toUpperCase());//ABCDEFKXYZ
String類的trim()方法
- 去除字符串前后空白
//String trim();
System.out.println(" hello world ".trim());
String類的valueOf()方法
- 將“非字串”轉(zhuǎn)換成“字符串”
//String中只有一個方法是靜態(tài)的,不需要new對象
//這個方法叫做valueOf
String s1 = String.valueOf(true);//true
String s1 = String.valueOf(180);//180
String s1 = String.valueOf(3.14);//3.14
//這個靜態(tài)的valueOf()方法,參數(shù)是一個對象的時候,會自動調(diào)用該對象的toString()方法
String s1 = String.valueOf(new Customer());
//System.out.println(s1);//沒有重寫toString()方法之前是對象內(nèi)存地址 com.bjpowernode.javase.
System.out.println(s1);//我是一個VIP客戶!!!
Object obj = new Object();
//通過源代碼可以看出:本質(zhì)上System.out.println()這個方法在輸出任何數(shù)據(jù)的時候都是先轉(zhuǎn)換成字符串,再輸出。
//println調(diào)用valueOf調(diào)用toString
System.out.println(obj);
class Customer{
public String toString(){
return "我是一個VIP客戶!!!"
}
}
原文鏈接:https://blog.csdn.net/weixin_47957908/article/details/129843297
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-05-08 一篇文章詳細解釋C++的友元(friend)_C 語言
- 2022-06-10 使用Android實現(xiàn)一個懸浮在軟鍵盤上的輸入欄_Android
- 2023-02-15 C++在vscode中的多文件編程問題解讀_C 語言
- 2022-11-22 Python實例方法與類方法和靜態(tài)方法介紹與區(qū)別分析_python
- 2021-12-03 Android消息機制Handler深入理解_Android
- 2022-09-07 C語言函數(shù)調(diào)用堆棧詳情分析_C 語言
- 2022-07-29 詳解Go語言中配置文件使用與日志配置_Golang
- 2022-09-02 六個Python編程最受用的內(nèi)置函數(shù)使用詳解_python
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支