必須要會回答的Java面試題(字串篇)
最近很多學習java的小白問我字串相關的問題,覺得很有必要整理下,以方便初學者理解字串以及應對今後面試中考官的提問。
如果你是有幾年Java開發經驗,可以根據目錄選擇性的閱讀以下內容,並歡迎留言補充。
問題列表如下:
0.String是最基本的資料型別嗎?
1.String是否可以被繼承?
2.Java中的String a = "abc"和String a = new String("abc")的區別?
3.為什麼字串是不可變的?
4.什麼是String常量池?
5.使用字串初始化程式碼:String a = new String("abc");建立多少個物件?
6.String類中intern()的作用?
7.使用equals()和'=='進行字串比較的差異?
8.String StringBuffer StringBuilder 三者各自執行緒安全性如何?
9.String,StringBuffer以及StringBuilder之間的區別?
10.如何連線多個字串。
11.如何分割一個String?
12.如何判斷兩個String是否相等?
13.String類中,字串長度是否有限制?
14.Java String “+”連線符拼接字串原理?
0.String是最基本的資料型別嗎?
Java中基本資料型別包括byte,int,char,long,float,double,boolean,short一共八個;String是定義在 java.lang 包下的一個類。它不是基本資料型別。
1.String是否可以被繼承?
不可以,因為String類似final類。
2.Java中的String a = "abc"和String a = new String("abc")的區別?
String a = "abc" 使用常量進行初始化,初始化後記憶體儲存在String常量池中
String a = new String("abc") 建立字串物件,JVM建立字串物件但不儲存於字串池。
3.為什麼字串是不可變的?
因為String類似final類。
4.什麼是String常量池?
字串池是一個特殊的記憶體區域,與儲存這些字串常量的常規堆記憶體分開。這些物件在應用程式的生命週期中被稱為字串變數。
如:雙引號直接建立的字串,String a = "abc",會將"abc"儲存在該區域。
5.使用字串初始化程式碼:String a = new String("abc");建立多少個物件?
上面一行程式碼將會建立1或2個字串。如果在字串常量池中已經有一個字串“abc”,那麼就只會建立一個“abc”字串。如果字串常量池中沒有“abc”,那麼首先會在字串池中建立,然後才在堆記憶體中建立,這種情況就會建立2個物件了。
6.String類中intern()的作用?
呼叫該方法時,如果池已包含String與equals(Object)方法確定的此物件相等的字串,則返回池中的字串。否則,將此String物件新增到池中,並String返回對此物件的引用。
它遵循對於任何兩個字串s和t,s.intern()==t.intern()是true當且僅當s.equals(t)是true。意味著如果s和t都是不同的字串物件並且具有相同的字元序列,則在兩者上呼叫intern()將導致由兩個變數引用的單個字串池文字。
7.使用equals和'=='進行字串比較的差異?
字串中equals是重寫的一個方法,比較字串中value字元陣列中字元是否一致,即比較的是字串的值,==不僅比較字串的值,而且還比較兩個字串所在記憶體地址是否相同。
8.String StringBuffer StringBuilder 三者各自執行緒安全性如何?
String StringBuffer執行緒安全,StringBuilder非執行緒安全。
9.String,StringBuffer以及StringBuilder之間的區別?
String是值不可變類,每次在String物件上的操作都會生成一個新的物件;StringBuffer和StringBuilder則允許在原來物件上進行操作,而不用每次增加物件;StringBuffer是執行緒安全的,但效率較低,而StringBuilder效率最高,但非執行緒安全。
10.如何連線多個字串。
String:通過解讀Java API,可以知道Java為字串連線運算提供特殊支援。 字串連線是通過StringBuilder (或StringBuffer )類及其append方法實現的。
StringBuffer:使用append實現
StringBuilder:使用append實現。
11.如何分割一個String?
可以使用字串分隔函式:public String[] split(String regex),根據傳入的正則字串進行分割,注意,如果最後一位剛好有傳入的字元,返回陣列最後一位不會有空字串。
12.如何判斷兩個String是否相等?
有兩種方式判斷字串是否相等,使用"=="或者使用equals方法。當使用"=="操作符時,不僅比較字串的值,還會比較引用的記憶體地址。大多數情況下,我們只需要判斷值是否相等,此時用equals方法比較即可。
還有一個equalsIgnoreCase可以用來忽略大小寫進行字串值比較。
13.String類中,字串長度是否有限制?
可以看字串類的原始碼,字串使用char陣列存放字元,該字元陣列為定義最大長度,故,理論上來說String是沒有長度限制的,限制的是你的記憶體有多大。
14.Java String “+”連線符拼接字串原理?
String字串拼接通過StringBuilder走中間過程,通過append方法實現。
程式有大量字串拼接時,建議直接StringBuilder實現,就不需要底層new很多臨時String物件了。注意null參與拼接時會變成字串"null"。
相關問題持續更新彙總,逐步新增程式碼及更詳細的原理解析。
相關文章
- 必須要會的 50 個 React 面試題React面試題
- Java程式設計師面試必須要掌握的面試題Java程式設計師面試題
- 20道你必須要背會的微服務面試題,面試一定會被問到微服務面試題
- 【4】進大廠必須掌握的面試題-Java面試-jdbc面試題JavaJDBC
- 【面試篇】寒冬求職季之你必須要懂的原生JS(上)面試求職JS
- 【面試篇】寒冬求職季之你必須要懂的原生JS(中)面試求職JS
- 【5】進大廠必須掌握的面試題-Java面試-spring面試題JavaSpring
- 面試前必須要知道的Redis面試題Redis面試題
- 零基礎學Java,必須要搞懂的10個問題!Java
- 面試中關於多執行緒同步,你必須要思考的問題面試執行緒
- 面試前必須要知道的21道Redis面試題Redis面試題
- 經典的Java面試題及回答集錦Java面試題
- 【8】進大廠必須掌握的面試題-Java面試-異常和執行緒面試題Java執行緒
- 【Java面試題】如何回答GC相關問題Java面試題GC
- 【9】進大廠必須掌握的面試題-DevOps面試面試題dev
- Python面試必須要看的15個問題Python面試
- [JAVA] CLASSPATH環境變數必須要配置嗎Java變數
- 【11】進大廠必須掌握的面試題-持續整合面試面試題
- 學java是不是必須要參加java培訓班?Java
- 20個必會的JavaScript面試題JavaScript面試題
- java開發必須要掌握的20個核心技術Java
- 你必須要會的防護DDoS技術,輕鬆化解流量攻擊難題
- iOS 面試必須會的---親身經歷+師兄面試後總結iOS面試
- 24個必須掌握的資料庫面試問題~資料庫面試
- 測試工程師必須要會寫程式碼嗎?工程師
- 測試人員為什麼必須要會 LinuxLinux
- 【12】進大廠必須掌握的面試題-持續測試面試面試題
- 必知必會sql面試題練習總結之學生課程篇SQL面試題
- 如何更好的回答面試問題面試
- git 必須要熟練掌握的命令Git
- 挑戰10個最難回答的Java面試題(附答案)Java面試題
- Java面試題分享:怎麼回答你對Spring的理解?Java面試題Spring
- Java在國內的路要走寬,必須要發展SwingJava
- leetcode我們必知必會的SQL面試題LeetCodeSQL面試題
- Java程式設計師微服務架構你必須要掌握的十個要點Java程式設計師微服務架構
- JavaScript必須要掌握的知識-作用域JavaScript
- Java面試必問,ThreadLocal終極篇Java面試thread
- Java面試必問-死鎖終極篇Java面試