public final class String extends Object數組
一、用final修飾的最終類,是表明字符串的類;安全
二、字符串在底層是以字符數組的形式存儲;app
三、任何的字符串都是String的對象ui
四、字符串常量能夠共享(下圖)編碼
String s1 = 「ab」;spa
String s2 = new String(「ab」); 線程
s1和s2指向的是同一塊內存空間,區別在於s1先指向運行時常量池,運行時常量池再指向堆內存,而s2是先在堆內存中開闢一塊空間,用來存儲運行時常量池中value的地址,而後根據value所在空間的地址去堆內存中找對應的字符數組,若沒有,則在常量池中新開闢一塊空間,並在堆內存中建立對應的字符數組,如有,直接調用便可。code
String s3 = 「a」+「b」;對象
字符串在使用+拼接的時候底層其實是調用了StringBuilder中的append的方法blog
String s4 = 「a」; 產生1個對象
s4 = s4+」b」 產生4個對象(new StringBuilder,」b」,」ab」,toString方法會返回一個new String對象)
字符串拼接方式:
一、+
二、直接使用StringBuilder的append方法
三、concat()
StringBuilder和StringBuffer的方法簽名如出一轍,用法一致,區別在於前者是線程不安全的,後者是線程安全的
表示沒有輸入任何字符: str.equals(」」)
經常使用方法:
建立字符串對象:String str = 「」;
調用方法:
str.length() 獲取字符串長度
str.charAt() 獲取指定下標位置字符
str.toCharArray() 將字符串轉化爲字符數組
字符數組轉化爲字符串
char[] c = {‘ ’,’ ’,’ ’,};
String str = new String(c);或者String str = new String(c,起始位置,個數); 指定要轉換的字符個數
str1.compareTo(str2) 按字典順序比較兩個字符串(相減不爲零才返回該差的值,不然會一致遍歷,若長度不等,較短與較長對應值都相等,則返回長度之差)
str1.compareToIgnoreCase(str2) 忽略字母大小寫進行比較
str.toUpperCase() 轉化爲大寫
str.toLowerCase() 轉化爲小寫
注意:字符串提供了一系列的操做而不改變原字符串的方法,操做的結果是產生一個新的字符串,原字符串並無發生任何改變
str1.equals(str2) 判斷字符串是否相等
str1.equalsIgnoreCase(str2) 忽略大小寫
instanceof 判斷對象和類的關係
對象 instanceof 類/接口 表示判斷對象是不是指定類/接口及其父類/父接口的對象
若是對象的實際類型繼承或者實現類/接口,則該對象也是繼承或者實現的類/接口的對象
str1.concat(str2) 將新字符串拼接在原字數串尾端(底層實際是數組的複製合併過程)
str.contains(「」) 判斷是否包含,只能判斷具體子串
str.endsWith(「」) 後綴(判斷是否以」」中的字符結束)
str.startsWith(「」) 前綴
str.getBytes(「utf-8」) 字符串轉字節(括號中能夠指定編碼,默認是GBK)
str.hashcode() 字符串的哈希碼惟一
str.indexOf(‘’) 獲取字符/字符串在給定的字符串中第一次出現時的下標,也能夠指定從某個下標開始找str.indexOf(「」,count),表示從下標爲count的位置開始日後找,若沒有該字符/字符串,則返回-1
str.lastIndexOf() 獲取字符/字符串在給定的字符串中最後一次出現時的下標,也能夠指定從某個下標開始找str.lastIndexOf(「」,count),表示從下標爲count的位置開始往前找,若沒有該字符/字符串,則返回-1
str.intern() 強制返回指向給定的字符串的常量池地址
str.isEmpty() 判斷字符串的長度是否爲0,注意區別於null,長度:0 != null
str.replace(‘’,’’) 用指定字符替換原字符
str.substring(起始,結束) 截取指定字符串,通常表示範圍的時候,習慣上包頭不包尾/含小不含大
str.trim() 去掉字符串先後的空白
String str = String.valueOf() 將其它類型(包括基本類型和引用類型)的數據轉化爲字符串
注意:打印一個對象(引用類型)時,底層先調用String.valueOf()方法,當對一個對象進行valueOf操做的時候,底層其實是調用了Object對象的tostring方法,所以輸出結果是該對象的地址
特殊的:打印字符數組時,底層也是先調用valueOf()方法,但該方法返回值是new String(),所以輸出的結果是對應字符數組的字符串
獲取字符串中的字符
將字符串用split方法按指定的正則規則切分紅字符串數組,遍歷該字符串數組,獲得單個字符
String s1 = "a,1,2,b,4,d"; String[] s2 = s1.split(","); for(String c:s2){ System.out.println(c); }
字符串和其它類型數據的互相轉化
·基本數據類型—>字符串
一、String s = String.valueOf(八種基本類型)
二、String s = 「」+八種基本類型數據
三、StringBuilder s = new StringBuilder().append(八種基本類型數據);
·字符串—>基本數據類型
int i = Integer.parseInt(); //這種方法除了字符不適用外,其它七種基本類型都適用,只須要將數據類型換爲對應的便可
char c = s.charAt(0); //字符串轉字符(字符串只能有一個字符),其中s是String對象
·數型數組—>字符串(數型數組包括整數和小數)
int[] in = {1,2,3,4,5}; String st = ""; for (int i = 0; i < in.length; i++) { String s = String.valueOf(in[i]); st += new String(new StringBuilder().append(s)); } System.out.println(st);
·字符串—>數型數組
String s = "123456"; char[] cs = s.toCharArray(); for (char c : cs) { int i = c-'0'; System.out.println(i); }
·字符數組—>字符串
char[] cs = {'a','b','c','d','e'};
String s = ""; s+=new String(new StringBuilder().append(cs)); System.out.print(s);
·字符串—>字符數組
String s = "abcde";
char[] cs = s.toCharArray(); for(char c:cs) System.out.println(c);