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"。