天天看點

JAVA面試題-字元串

1.String是最基本的資料類型嗎?

2.String是否可以被繼承?

3.Java中的String a = "abc"和String a = new String("abc")的差別?

4.為什麼字元串是不可變的?

5.什麼是String常量池?

6.使用字元串初始化代碼:String a = new String("abc");建立多少個對象?

7.String類中intern()的作用?

8.使用equals()和'=='進行字元串比較的差異?

9.String StringBuffer StringBuilder 三者各自線程安全性如何?

10.String,StringBuffer以及StringBuilder之間的差別?

11.如何連接配接多個字元串。

12.如何分割一個String?

13.如何判斷兩個String是否相等?

14.String類中,字元串長度是否有限制?

15.Java String “+”連接配接符拼接字元串原理?

1.String是最基本的資料類型嗎?

Java中基本資料類型包括byte,int,char,long,float,double,boolean,short一共八個;String是定義在 java.lang 包下的一個類。它不是基本資料類型。

2.String是否可以被繼承?

不可以,因為String類似final類。

3.Java中的String a = "abc"和String a = new String("abc")的差別?

String a = "abc" 使用常量進行初始化,初始化後記憶體存儲在String常量池中

String a = new String("abc") 建立字元串對象,JVM建立字元串對象但不存儲于字元串池。

4.為什麼字元串是不可變的?

因為String類似final類。

5.什麼是String常量池?

字元串池是一個特殊的記憶體區域,與存儲這些字元串常量的正常堆記憶體分開。這些對象在應用程式的生命周期中被稱為字元串變量。

如:雙引号直接建立的字串,String a = "abc",會将"abc"存儲在該區域。

6.使用字元串初始化代碼:String a = new String("abc");建立多少個對象?

上面一行代碼将會建立1或2個字元串。如果在字元串常量池中已經有一個字元串“abc”,那麼就隻會建立一個“abc”字元串。如果字元串常量池中沒有“abc”,那麼首先會在字元串池中建立,然後才在堆記憶體中建立,這種情況就會建立2個對象了。

7.String類中intern()的作用?

調用該方法時,如果池已包含String與equals(Object)方法确定的此對象相等的字元串,則傳回池中的字元串。否則,将此String對象添加到池中,并String傳回對此對象的引用。

它遵循對于任何兩個字元串s和t,s.intern()==t.intern()是true當且僅當s.equals(t)是true。意味着如果s和t都是不同的字元串對象并且具有相同的字元序列,則在兩者上調用intern()将導緻由兩個變量引用的單個字元串池文字。

8.使用equals和'=='進行字元串比較的差異?

字串中equals是重寫的一個方法,比較字元串中value字元數組中字元是否一緻,即比較的是字元串的值,==不僅比較字元串的值,而且還比較兩個字元串所在記憶體位址是否相同。

9.String StringBuffer StringBuilder 三者各自線程安全性如何?

String  StringBuffer線程安全,StringBuilder非線程安全。

10.String,StringBuffer以及StringBuilder之間的差別?

String是值不可變類,每次在String對象上的操作都會生成一個新的對象;StringBuffer和StringBuilder則允許在原來對象上進行操作,而不用每次增加對象;StringBuffer是線程安全的,但效率較低,而StringBuilder效率最高,但非線程安全。

11.如何連接配接多個字元串。

String:通過解讀Java API,可以知道Java為字元串連接配接運算提供特殊支援。 字元串連接配接是通過StringBuilder (或StringBuffer )類及其append方法實作的。

StringBuffer:使用append實作

StringBuilder:使用append實作。

12.如何分割一個String?

可以使用字串分隔函數:public String[] split(String regex),根據傳入的正則字元串進行分割,注意,如果最後一位剛好有傳入的字元,傳回數組最後一位不會有空字元串。

13.如何判斷兩個String是否相等?

有兩種方式判斷字元串是否相等,使用"=="或者使用equals方法。當使用"=="操作符時,不僅比較字元串的值,還會比較引用的記憶體位址。大多數情況下,我們隻需要判斷值是否相等,此時用equals方法比較即可。

還有一個equalsIgnoreCase可以用來忽略大小寫進行字元串值比較。

14.String類中,字元串長度是否有限制?

可以看字元串類的源碼,字元串使用char數組存放字元,該字元數組為定義最大長度,故,理論上來說String是沒有長度限制的,限制的是你的記憶體有多大。

15.Java String “+”連接配接符拼接字元串原理?

String字元串拼接通過StringBuilder走中間過程,通過append方法實作。

程式有大量字元串拼接時,建議直接StringBuilder實作,就不需要底層new很多臨時String對象了。注意null參與拼接時會變成字元串"null"。

繼續閱讀