@
目錄- 一、前言(可忽略)
- 二、String變數的認知
- 三、String類的構造方法
- 四、String類的基本方法
- 4.1 toString()方法
- 4.2 equals()方法
- 4.3 equalsIgnoreCase()方法
- 4.4 getBytes()方法
- 4.5 indexOf()方法
- 4.6 lastindexOf()方法
- 4.7 charAt( )方法
- 4.8 compareTo()方法
- 4.9 contains()方法
- 4.10 startsWith()方法
- 4.11 endsWith()方法
- 4.12 isEmpty()方法
- 4.13 replace()方法
- 4.14 split()方法
- 4.15 substring( )方法
- 4.16 toCharArray()方法
- 4.17 toLowerCase()方法
- 4.18 toUpperCase()方法
- 4.19 trim()方法
- 4.20 valueof()方法
- 4.21 StringBuffer()方法與StringBuilder()方法
一、前言(可忽略)
作者是一位自學JAVA的小白,通過網上視頻學習和自己對String類的理解,現將自己對String類的認知描述如下:(希望能與各位同行好友共同分享自己所學的java知識,同時,也熱切期望各位同行前輩能夠幫助作者指出不足,讓小白的編程技術能更上一層樓,感謝各位同行大佬,
String是一種參考型別,通過存盤、參考方法區字串常量池中對應的字串的地址來實作存盤、賦值等一系列相應的操作,字串存盤在方法區字串常量池中,在已有的基礎上不會新建,垃圾回收器不會釋放常量,
二、String變數的認知
String參考變數直接字串賦值
(深入原理:是將字串的記憶體地址賦值給變數,然后String變數通過索引記憶體地址找到位于字串常量地址池中的字串)
(小白理解:String是一種參考型別,通過參考字串記憶體地址來呼叫字串,JVM不會在已有的基礎上新建或者釋放字串)
例一:
public static void main(String[] args) {
String name="hello";
String name1="hello";
System.out.println(name==name1);//比較的是字串記憶體地址
輸出:
true
例二:
但這種情況不是
String i=new String("abc");
String j=new String("abc");
System.out.println(i==j);
輸出
false
因為new是在堆記憶體創建Sring物件來保存在字串常量池中的String物件(字串)的記憶體地址
i和j保存的是在堆記憶體中的String物件的記憶體地址
并不是在字串常量池中的String物件(字串)的記憶體地址
如要使new的物件輸出為true,則必須呼叫String.equals方法
System.out.println(i.equals(j));//true,但可能報空指標例外
//最好這樣寫:(來自一位資歷深厚的程式員,雖不是我)
System.out.println("abc".equals(j));
System.out.println(name);//注意:直接輸出String參考變數會直接呼叫重寫toString方法
三、String類的構造方法
String s=new String(""); //s1指向堆記憶體中new的String物件,由該String物件保存字串的記憶體地址,
String s1=""; 通過創建String物件來參考字串
String s2=new String(char 陣列); //將char陣列內的元素轉換成字串
String s3=new String(char 陣列,offset(起始下標),coute(長度));//將char陣列內起始下標為i往后j個長度的元素轉換為字串
String s4=new String(byte 陣列);//將byte陣列內的元素轉換成字串
String s3=new String(byte 陣列,起始下標,長度); //將byte陣列內起始下標為i往后j個長度的元素轉換為字串
以上是常用的,實在不行,自己看原始碼或者API(英文可以找英文,中文不行找語文老師),
四、String類的基本方法
4.1 toString()方法
? ?? public String toString()
? ?? 作用:將物件轉換成字串,
Exercise string=new Exercise();
System.out.println(string.toString());
? ?? 輸出:該物件的包名.類名@該物件的記憶體地址
一般使用的話,是輸出該物件建構式的引數,改寫toString()方法成我們想要輸出的格式
回傳需求形式
public String toString()
{
return year+"年"+month+"月"+day+"日";
}
注意:輸出String物件不必重寫toString()方法,問就是已經寫好了(看原始碼),
4.2 equals()方法
? ??public boolean equals(Object anObject)
? ??作用:比較兩個物件的記憶體地址是否相等
一般使用的話,是比較兩個物件的內容(建構式的引數)是否相等
@Override
public boolean equals(Object obj) {
if (obj==null||!(obj instanceof Exercise)){
return false;
}
if (obj==this){
return true;
}
Exercise exercise=(Exercise)obj;
if (this.id==exercise.id&&this.name==exercise.name)//比較建構式的引數
{
return true;
}
return false;
}
注意:比較兩個物件不能用“==”,因為java中是看兩個物件的記憶體地址,如比較兩個物件是否相同或內容相同,必須重寫equals()方法,
String string=new String();
String string1=new String();
System.out.println(string==string1);//false
4.3 equalsIgnoreCase()方法
? ??public boolean equalsIgnoreCase(String anotherString)
? ??引數:anotherString - 與此 String 進行比較的 String,
? ??作用: 忽略字母大小寫比較字串大小
System.out.println("ABC".equalsIgnoreCase("abc")); //忽略字母大小寫比較字串大小
4.4 getBytes()方法
? ??public byte[] getBytes()
? ??作用:將字串的字符轉換成對應的Byte組元素
String string3="abc";
byte []Byte=string3.getBytes();
//將字串的字符轉換成對應的Byte組元素
for (int i = 0; i <Byte.length ; i++) {
System.out.println( Byte[i]);
}
4.5 indexOf()方法
? ??作用:查找某個字串在當前字串第一次出現的下標
String string4="ABCDefG";
String string5="G";
System.out.println("ABCDefG".indexOf("G"));//6
//查找某個字串在當前字串第一次出現的下標
4.6 lastindexOf()方法
? ??作用:查找某個字串在當前字串中最后一次出現的下標
System.out.println("GABCDefG".lastIndexOf("G"));//7
4.7 charAt( )方法
? ??public char charAt(int index)
? ??引數:index-索引,下標
? ??作用:字串是一個String物件,String物件能呼叫方法charAt(索引指定處的值)
char c="China".charAt(1);//字串是一個String物件,String物件能呼叫方法charAt(索引指定處的值)
System.out.println(c);//h
4.8 compareTo()方法
? ??作用:compareTo方法比較字串大小(拿著第一個字串的第一個字符與后面字串的第一個字符一一對應比較
int result="abc".compareTo("abc");
//compareTo方法比較字串大小(拿著第一個字串的第一個字符與后面字串的第一個字符一一對應比較
System.out.println(result);//=0 前后一致
int result2="abc".compareTo("abcd");
System.out.println(result2);//=-1 前小后大
int result4="abcd".compareTo("abc");
System.out.println(result4);//=1 前大后小
int result3="abcd".compareTo("abce");
System.out.println(result3);//=-1
int result5="abce".compareTo("abcd");
System.out.println(result5);//=1
4.9 contains()方法
? ??作用:判斷第一個字串中是否包含第二個字串 true包含 false 不包含
System.out.println("Hello World!".contains("Hello"));
//判斷第一個字串中是否包含第二個字串 true包含 false 不包含
4.10 startsWith()方法
? ?? 作用:測驗字串是否以某字串開頭
System.out.println("2021-1-5".startsWith("2021"));//true
System.out.println("2021-1-5".startsWith("2020"));//false
4.11 endsWith()方法
? ?? 作用:判斷第一個字串是否以后面的字串結尾
System.out.println("I want to learn Java".endsWith("Java"));
//判斷第一個字串是否以后面的字串結尾 true 是
4.12 isEmpty()方法
? ?? 作用:判斷某個字串是否為空
System.out.println("程式猿江小白".isEmpty());//false
String string8="";
System.out.println(string8.isEmpty());//true
4.13 replace()方法
? ?? 作用: 將當前字串中的某些字串替換為指定字串,并重新生成子字串
System.out.println("ABCGEF".replace("G","D"));//ABCDEF
4.14 split()方法
? ?? 作用:以某個字串為分隔符將當前字串拆分成多個子字串
String[]ymd="2021-1-2".split("-");
for (int i = 0; i <ymd.length ; i++) {
System.out.println(ymd[i]);
}
/**
* 2021
* 1
* 2
*/
String param="name=zhangliang&password=123&age=20";
//以"="或"|"為分隔符將當前字串拆分成多個子字串
String[] string10=param.split("=|&");//| 或
for (int k = 0; k <string10.length ; k++) {
System.out.println(string10[k]);
}
/**
* name
* zhangliang
* password
* 123
* age
* 20
*/
4.15 substring( )方法
? ?? 作用:截取父字串,生成子字串
System.out.println("How should I face with my lost future".substring(13));
//face with my lost future
//從beginIndex開始截取,截取endIndex-beginIndex個長度,到第endIndex-1位字符結束(不包括endIndex位字符)
System.out.println("How should I face with my lost future".substring(0,2));
//Ho
4.16 toCharArray()方法
? ?? 作用:將字串轉換成char陣列
char[]chars1="China".toCharArray();
for (int i = 0; i <chars1.length ; i++) {
System.out.println(chars1[i]);
}
/**
* C
* h
* i
* n
* a
*/
4.17 toLowerCase()方法
? ?? 作用:將字串全部以小寫字符表示
System.out.println("AMeriCAN".toLowerCase());//american
4.18 toUpperCase()方法
? ?? 作用:將字串全部以大寫字符表示
System.out.println("chIna".toUpperCase());//CHINA
4.19 trim()方法
? ?? 作用:去除字串前后的空白
System.out.println(" time ".trim());//time
System.out.println(" love story ".trim());//love story//
4.20 valueof()方法
? ?? 作用:將非字串轉換成字串
/**
* String中唯一的靜態方法獨苗
* String.valueof
* 作用:將非字串轉換成字串
*/
String string1=String.valueOf(new StringTest02());
/**
* valueof方法,在引數為一個物件時,如果該物件沒有重寫toString()底層會自
* 動呼叫object.toString方法
* 為什么輸出參考的時候,會呼叫toString()方法
* 因為println底層是呼叫的valueof(),而valueof()底層呼叫的是obj的toString
* 方法
* System.out.println()列印輸出時都是先轉換成字串
*/
System.out.println(string1);
4.21 StringBuffer()方法與StringBuilder()方法
? ?? 作用:拼接字串
StringBuffer stringBuffer=new StringBuffer();
//指定初始化容量的StringBuffer物件(字串緩沖區物件)默認初始化16個長度的byte陣列
stringBuffer.append("A");//拼接字串呼叫append進行追加,如果byte陣列滿了會自動擴容
stringBuffer.append("B");
stringBuffer.append("C");
System.out.println(stringBuffer);//ABC
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("a");
stringBuilder.append("b");
stringBuilder.append("c");
System.out.println(stringBuilder);//abc
/**
* StringBuffer與StringBuilder的區別
* StringBuffer中的方法都有:synchronized關鍵字修飾,表示StringBuffer在多執行緒環境下運行是安全的
* StringBuilder中的方法沒有,表示在多執行緒環境下是不安全的,但效率較高
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/266962.html
標籤:面向對象
上一篇:Vue.js-詳解+案例
