JAVA基礎複習十二 String類

2021-08-10 10:43:29 字數 4193 閱讀 2931

a:字串字面值"abc"也可以看成是乙個字串物件。

b:字串是常量,一旦被賦值,就不能被改變。

如string s = "abc";

s = "abcd"。這裡改變的是物件的引用s指向的物件的位址值。常量池中建立了兩個常量,即「abc」和「abcd」,分別把位址值賦予了引用s。所以改變的不是字串常量,而是引用的位址值。

string s1 = new string("hello");

string s2 = "hello"。的記憶體圖:

前者建立了兩個物件new string()和「abc」,後者只建立了乙個物件「abc」;

* public string():空構造

* public string(byte bytes):把位元組陣列轉成字串

* public string(byte bytes,int index,int length):把位元組陣列的一部分轉成字串

* public string(char value):把字元陣列轉成字串

* public string(char value,int index,int count):把字元陣列的一部分轉成字串

* public string(string original):把字串常量值轉成字串

string類的常見面試題)(掌握)

* 1.判斷定義為string型別的s1和s2是否相等

* string s1 = "abc";

* string s2 = "abc";

* system.out.println(s1 == s2); true,兩個引用指向常量池中的同乙個位址值

* system.out.println(s1.equals(s2)); true

* 2.下面這句話在記憶體中建立了幾個物件?

* string s1 = new string("abc"); 兩個物件

* 3.判斷定義為string型別的s1和s2是否相等

* string s1 = new string("abc");

* string s2 = "abc";

* system.out.println(s1 == s2);false,s1指向堆記憶體中string物件的位址值,該物件再指向常量池中「abc」的位址值;s2直接指向常量池中「abc」的位址值。

* system.out.println(s1.equals(s2));true

* 4.判斷定義為string型別的s1和s2是否相等

* string s1 = "a" + "b" + "c";

* string s2 = "abc";

* system.out.println(s1 == s2); true;string類有常量優化機制,編譯時直接先把常量相加,如同int i = 3+4;

* system.out.println(s1.equals(s2));true

* 5.判斷定義為string型別的s1和s2是否相等

* string s1 = "ab";

* string s2 = "abc";

* string s3 = s1 + "c";

* system.out.println(s3 == s2);false;因為string的拼接使用它的緩衝區stringbuffer來完成的,要建立stringbuffer的物件,再通過tostring轉換成string,所以s3的位址值是堆記憶體中stringbuffer物件的位址值。

* system.out.println(s3.equals(s2));true

*6.string s1 = "hello";

* string s2 = "world";

* string s3 = "helloworld";

* system.out.println(s3 == s1 + s2);// false

* system.out.println(s3.equals((s1 + s2)));// true

* system.out.println(s3 == "hello" + "world");// true

* system.out.println(s3.equals("hello" + "world"));// true

對於第三題,字串如果是變數相加,是先開空間,再相加,新開的空間的位址值和原來的不一樣(如第二題),而如果字串是常量,則是在編譯時期先相加再建立空間(就如同s = 3+4 一樣,是先直接計算3+4的和為7,再把7給s),但是建立的時候發現相加的結果「helloworld」在常量池中已經有了,所以就直接把原來的位址值賦值過去了。

* boolean equals(object obj):比較字串的內容是否相同,區分大小寫

* boolean equalsignorecase(string str):比較字串的內容是否相同,忽略大小寫

* boolean contains(string str):判斷大字串中是否包含小字串

* boolean startswith(string str):判斷字串是否以某個指定的字串開頭

* boolean endswith(string str):判斷字串是否以某個指定的字串結尾

* boolean isempty():判斷字串是否為空。

* int length():獲取字串的長度。

* char charat(int index):獲取指定索引位置的字元

* int indexof(int ch):返回指定字元在此字串中第一次出現處的索引。

* int indexof(string str):返回指定字串在此字串中第一次出現處的索引。

* int indexof(int ch,int fromindex):返回指定字元在此字串中從指定位置後第一次出現處的索引。

* int indexof(string str,int fromindex):返回指定字串在此字串中從指定位置後第一次出現處的索引。

* lastindexof

* string substring(int start):從指定位置開始擷取字串,預設到末尾。

* string substring(int start,int end):從指定位置開始到指定位置結束擷取字串。

* byte getbytes():把字串轉換為位元組陣列。

* char tochararray():把字串轉換為字元陣列。

* static string valueof(char chs):把字元陣列轉成字串。

* static string valueof(int i):把int型別的資料轉成字串。

* 注意:string類的valueof方法可以把任意型別的資料轉成字串。

* string tolowercase():把字串轉成小寫。

* string touppercase():把字串轉成大寫。

* string concat(string str):把字串拼接。

* a:string的替換功能

* string replace(char old,char new)

* string replace(string old,string new)

* b:string的去除字串兩空格

* string trim()

* c:string的按字典順序比較兩個字串

* int compareto(string str)//按照碼表比較大小

* int comparetoignorecase(string str)//不區分大小的比較

用compareto進行比較的時候,會用unicode碼表進行比較。

char的轉換是按照unicode碼表

io流的時候的轉換是按照gbk碼表,是硬碟到記憶體的操作,在硬碟上所儲存的都是以位元組形式的。可以讀到記憶體中以字串形式存在。主要看系統的碼表是什麼。

unicode碼表和gbk碼表都囊括了ascii碼表。

Java基礎複習執行緒

執行緒 實現多執行緒的兩種方法 繼承thread類,重新run方法 thread a new mythread 子執行緒 thread.start 實現runnable介面,實現run方法。myrunnable my new myrunable 在這個myrunnable類中已經重寫了run方法 t...

java基礎複習(4)

極限程式設計 測試先行,結對程式設計 要求兩個人水平相當。能夠提高效率,不易出錯,而且程式設計者無法偷懶哈 看過程式設計師上面的一篇文章,極限程式設計具有良好的實踐性比如 測試驅動開發,持續整合,使用者故事。測試驅動保證了開發人員的編碼質量。持續整合保證了每天完成的任務都能夠成功整合到系統中,保持專...

java基礎複習(物件)

double integer valueof string string.valueof double integer int ns for int i 0 i 5 1 i for int j 0 j 5 1 i j if ns j 很簡單的乙個演算法,兩兩比較得到大的值然這個值繼續比較下乙個,最後...