您好,登錄后才能下訂單哦!
本篇內容主要講解“如何理解Java String類的性質與比較”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解Java String類的性質與比較”吧!
1.什么是String?
2.String類的構造方法
3.String類的性質
4.String之間的相互比較
首先,初學者一定要知道String是一個類,它是字符串類型,但它不屬于基本數據類。 所謂字符串類型,意思就好比將字符(也就是char類型)像烤串一樣串起來,列如' a '和' b '拼接起來變成"ab"(注意字符串使用雙引號)。' a '和' b'是字符類型也就是char類型,而" ab"則是一個字符串類型。ps:字符串可以為中文
當然以上只是口頭描述,具體的解釋還是看jdk文檔
學習一個類首先需要學習它的構造方法,掌握了它的所有實例化方式才能更好的使用它,以下是jdk文檔對String類構造方法的總結。(ps:jdk文檔對我們的學習具有很大幫助,里面記錄了java所有的包和接口,可以去網上下載一個中文版的)
通過jdk文檔中我們可以看出String類的構造方法很多,但是我們只要掌握常用的二種即可
1.public String(char[] value)
public String(char[] value)
通過傳入一個char[]構建一個String對象,會將char[]內的數據挨個拼接成一個字符串。在寫代碼的過程中經常會涉及到char與String的轉換,所以該方法需要熟記
下面為代碼演示
public class myString { public static void main(String[] args) { char[] arr={'a','b','c','d'}; String string = new String(arr); System.out.println(string);//abcd } }
2.public String(char[] value, int offset, int count)
public String(char[] value,int offset,int count)
第二種構造方法是在第一種的基礎上多了兩個變量,其中offset是初始的偏移量,count是我們需要復制的長度,就是在數組value上選取一部分成為String對象。該方法在某些情況下會使用到,需要記住
下面為代碼演示
public class myString { public static void main(String[] args) { char[] arr={'a','b','c','d','e','f'}; String string = new String(arr,1,4); System.out.println(string);//bcde //offect為開始復制的下標,count為復制的長度 } }
byte類型的數組轉化為String其實也同理與char,這里也不過多敘述,我們使用String時通常是像常用數據類型一樣直接使用給它賦值,學好String最主要還是學好它的性質。
jdk文檔中可以很清楚的看見在String類的聲明中它被finaly修飾,所以它具有不可變性。
但是這個不可變性怎么理解呢?
public class myString { public static void main(String[] args) { int b=100; System.out.println(b);//100 b=10; System.out.println(b);//10 String a="aaaa"; System.out.println(a);//aaaa a="bbbb"; System.out.println(a);bbbb } }
有人看到這段代碼打印結果就會發出疑問,a的值不一樣和b變化了嗎?
但這里我們要搞清楚一個誤區:a只是一個String對象的引用,它保存的是這個String對象的地址,并不是String本身,我們通過訪問a去訪問到String對象實際的內容
我們通過一個圖來了解
修改后:
對圖解析:我們可以發現我們將對a賦值"bbbb"時,原來的字符串常量池中的aaaa并未改變,而是在字符串常量池中重新產生了一個新的String對象"bbbb",并讓a指向它。所以我們說的不可變性是指String對象的內容一旦確定是無法更改的。這需要我們時刻記住
通過String類的不可變性,就產生了String的最大考點。
String類是非常重要且常見的類,我們使用的場景非常多,對String類之間是否相等的比較情況場景非常多見,掌握比較String比較的能力必不可少。
1.
public class myString { public static void main(String[] args) { String a1=new String("AAAA"); String a2=new String("BBBB"); System.out.println(a1==a2);//false System.out.println(a2.equals(a2));//true } }
解析:雖然a1與a2指向的對象內容相同,但地址不同,兩者指向的不是同一個對象,==比較的是地址,而equals比較的是內容
2.
public class myString { public static void main(String[] args) { String a1=new String("AAAA"); String a2=a1; System.out.println(a1==a2);//true System.out.println(a2.equals(a2));//true } } public static void main(String[] args) { String a1=new String("AAAA"); String a2=new String(a1); System.out.println(a1==a2);//false System.out.println(a2.equals(a2));//true } }
解析:這里將String當做基本類型使用,上面將a1賦值給a2的操作,可以理解為a1的地址賦值給a2,所以a1與a2存放的都是"AAAA"的地址。而下面的代碼將a1作為參數給a2,會重新開辟一片內存空間給a2,使其內容與a1一致,但地址不一樣。
3、
public class myString { public static void main(String[] args) { String a1="aaaa"; String a2="aaaa"; System.out.println(a1==a2);//true System.out.println(a2.equals(a2));//true } }
解析:當做基本數據類型使用的String對象會保留在字符串常量池中,每一次這樣使用時jvm會檢索常量池是否已經存在,如果已經存在將不會再創建,而是讓新的引用再次指向已經存在的String對象
總結:對于String類的比較我們需要使用equals,因為equals單單只考慮字符串的內容,而==還需要考慮地址
到此,相信大家對“如何理解Java String類的性質與比較”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。