更新時間:2020-10-22 17:09:53 來源:動力節點 瀏覽1347次
相信各位想面試程序員的朋友們,在面試前都會做的功課就是java面試題的搜集整理與學習。字符串是在面試中經常出現的題目,算是必考題。關于字符串,我們以前也學習過string字符串以及字符串截取方式等相關知識,下面整理了10道java字符串面試題,里面的內容都是十分基礎的,大家可以來檢測一下關于java字符串的內容自己掌握的是否全面。
1、創建String對象的不同方式有哪些?
答:兩種方式。一種是通過new很關鍵字來創建。使用這種方式時,JVM創建字符串對象但不存儲在字符串池中,我們可以調用intern()方法將該字符串對象存儲在字符串池中,如果該字符串池已經有了同樣值得字符串,則返回引用。另一種是使用雙引號來直接創建。使用這種方式時。JVM去字符串找有沒有相同值的字符串,如果有,則返回找到的字符串引用。否則創建一個新的字符串對象,并存儲在字符串池中。
2、什么是String,它是什么數據類型?
答:String是定義在java.lang包下的一個類,它不是基本數據類型。
String是不可變的,JWM使用字符串池來儲存所有的字符串對象。
3、如何比較兩個字符串?
答:String內部實現了Comparable接口,有兩個比較方法:compareTo(String anotherString)和compareToIgnoreCase(String str)。
compareTo(String anotherString)與傳入的anotherString字符串進行比較,如果小于傳入的字符串返回負數,如果大于則返回正數。當兩個字符串值想等時,返回0此時equals方法會返回true。equalsIgnoreCase(String str)該方法與compareTo方法類似,區別只是內部利用了Character.toUpperCase等方法進行了大小轉換后進行比較。
4、String、StringBuffer、StringBuilder的區別?
答:String是不可變類,每當我們對String進行操作的時候,總會創建新的字符串。操作String和耗費資源,所以java提供了兩個工具類來操作String——StringBuffer和StringBuilder。
StringBuilder和StringBuffer是可變類,StringBuffer是線程安全的,StringBuilder則不是線程安全的。所以在多線程對同一字符串進行操作的時候,我們選擇StringBuffer。在不需要處理多線程的情況下,StringBuilder的效率比StringBuffer高。
5、String是不可變的有什么好處?
答:由于String是不可變類,所以在多線程中使用是安全的,我們不需要做其他任何同步操作。String是不可變的,其值也是不可變的,所以用來存儲數據密碼很安全。因為java字符串不可變,可以在java運行時節省大量堆空間。因為不同的字符串變量可以引用池中的相同的字符串。如果字符串是可變的話,任何一個變量的值改變,就會映射到其他變量,那么字符串池也就沒有什么意義了。
6、下面程序的運行結果是什么?
String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2)); //1,false
StringBuffer s3 = new StringBuffer("abc");
System.out.println(s3.equals("abc")); //2,false
System.out.println(s3.toString().equals("abc")); //3,true
答:注釋1打印為false,主要考察String的equals方法,String源碼中 equals 方法有對參數進行 instance of String 判斷語句,StringBuffer的祖先為CharSequence,所以不相等;注釋2打印為false,因為StringBuffer 沒有重寫Object的equals方法,所以Object的equals方法實現是==判斷,故為 false; 注釋3打印為true,因為Object的toString方法返回為String類型,String重寫了equals方法實現為值比較。
7、為什么針對安全保密高的信息,char[]比String更好?
答:因為String是不可變的,一旦創建就不能更改,直到垃圾收集器將它回收才能消失,即使我們修改了原先的變量,實際上也是在內存中新建一個對象,原數據還是保留在內存中等待回收;而字符數組char[]中的元素是可以更改的,也就是說像密碼等保密信息用完之后我們可以馬上修改它的值而不留痕跡,從而相對于String有更好的安全性。
8、說說 String str = "hello world"; 和 String str = new String("hello world"); 的區別?
答:在 java的class文件中有專門的部分用來存儲編譯期間生成的字面常量和符號引用,這部分叫做class文件常量池,在運行期間對應著方法區的運行時常量池,所以String str = "hello world"; 在編譯期間生成了 字面常量和符號引用,運行期間字面常量 "hello world" 被存儲在運行時常量池(只保存了一份),而通過new關鍵字來生成對象是在堆區進行的,堆區進行對象生成的過程是不會去檢測該對象是否已經存在的,所以通過new來創建的一定是不同的對象,即使字符串的內容是相同的。
9、如何判斷兩個String是否相等?
答:有兩種方式判斷字符串是否相等,使用“= = ”或者使用equals方法。當使用 “= =”操作符時,不僅比較字符串的值還比較引用的內存的值。大多相互情況下,我們只需要判斷值是否相等,此時用equals方法即可。還有一個用equalsIgnoreCase可以用來忽略大小寫進行比較。
10、如何將String轉換為byte array,反過來呢?
答:使用String的getBytes()方法將String轉換成byte數組,使用String的構造方法new String(byte[] arr)將byte數據轉為String。
public class StringToByteArray{
public static void main(String[] args){
String str="PANKAJ";
byte[] byteArr=str.getBytes();
//print the byte[] elements
System.out.println("String to byte array:"+Array.toString(byteArr))
}
public static void main(String[] args)
{
byte[] byteArray={'P','A','N','k','A','J'};
byte[] byteArray={80,65,78,75,65,74};
String str=new String(byteArray);
Srting str1=new String(byteArray1);
System.out.println(str);
System.out.println(str1);
}
}
以上是今天要學習的java字符串面試題,因為現在的公司越來越看重java程序員的基本能力十分扎實,對java的基礎知識考查是十分重視的,所以上面的10道java字符串面試題中涉及的內容希望大家認真學習,遇到不會的及時查漏補缺,為java面試做好準備。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習