[轉載] 必須要會回答的Java面試題(字符串篇)

參考鏈接: 比較Java中的兩個字符串String

最近很多學習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()將導致由兩個變量引用的單個字符串池文字。?

典型考題:?

String s1 = new String("ab") + new String("c");

s1.intern();因為此時常量池沒有"abc",會將s3指向常量"abc"

String s2 = "abc";

System.out.println(s1 == s2);//true

?

String s3 = new String("de") + new String("f");

String s4 = "def";

s3.intern();// 因為此時常量池有"def",不會將s3指向常量"def"

System.out.println(s3 == s4);// false

?

String s5 = "ghi";

String s6 = new String("ghi");

s6.intern();// 因為此時常量池有"ghi",不會將s6指向常量"ghi"

System.out.println(s5 == s6);//false?

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

相關問題持續更新匯總,逐步添加代碼及更詳細的原理解析。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] java如何實現一個字符串的反轉和替換

參考鏈接&#xff1a; 反轉Java中的字符串String 一、java字符串的反轉 1.利用java字符串的拼接實現字符串的反轉&#xff0c;代碼如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出&#xff0c;這個對象是否是這個特定類或者是它的子類的一個實例。 用法&#xff1a;result object instanceof class參數&#xff1a;Result&#xff1a;布爾類…

[轉載] 將一個整數型字符串轉換為一個整數

參考鏈接&#xff1a; Java中整數到字符串轉換的不同方法 package com.utl.string; /* * 將一組整數字符串轉換為整數 * 例&#xff1a;"234"轉換為整數型234 * 分析&#xff1a;涉及到許多問題&#xff0c;例如非法輸入&#xff0c;有正負號&#xff0c;是否為空字…

升級PowerShell至4.0版本

為了更好的使用Cmder v1.2&#xff0c;不得不升級PowerShell為4.0。 不知道Cmder的&#xff0c;可以點擊這里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是運行在Windows機器上實現系統和應用程序管理自動化的命令行腳本環境。 需要.NET環境…

[轉載] 字符串太長 pep8_Python f字符串– PEP 498 –文字字符串插值

參考鏈接&#xff1a; 從Java中的字符串中刪除前導零 字符串太長 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

備忘(持續更新。。。)

1、在springmvc這個框架里面&#xff0c;創建新的業務邏輯層&#xff0c;dao、service層至少需要一個接口&#xff0c;項目才能跑起來 2、獲取當前用戶桌面路徑 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[轉載] 字符串操作截取后面的字符串_對字符串的5個必知的熊貓操作

參考鏈接&#xff1a; 修剪Java中的字符串(刪除前導和尾隨空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的計算機名

林功能級別必須為Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[轉載] Google Java代碼規范

參考鏈接&#xff1a; 使用Java計算文本文件txt中的行數/單詞數/字符數和段落數 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode風格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅圖之行——簽證篇

本人有幸通過IT168&itpub的站慶活動http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并應微軟邀請參加了在西雅圖舉辦的The Conference for SQL Server Professionals&#xff08;簡稱SQL-PASS&#xff09;。 SQL-PASS會議計劃于2012年11月6日-9日舉行&#xff0…

[轉載] java8 lambda表達式 List轉為Map

參考鏈接&#xff1a; 使用Lambda表達式檢查字符串在Java中是否僅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…

11.python并發入門(part5 event對象)

一、引入event。 每個線程&#xff0c;都是一個獨立運行的個體&#xff0c;并且每個線程的運行狀態是無法預測的。 如果一個程序中有很多個線程&#xff0c;程序的其他線程需要判斷某個線程的運行狀態&#xff0c;來確定自己下一步要執行哪些操作。 threading模塊中的event對象…

[轉載] Java 將字符串首字母轉為大寫 - 利用ASCII碼偏移

參考鏈接&#xff1a; 使用ASCII值檢查Java中的字符串是否僅包含字母 將字符串name 轉化為首字母大寫。普遍的做法是用subString()取第一個字母轉成大寫再與之后的拼接&#xff1a; str str.substring(0, 1).toUpperCase() str.substring(1); 看到一種效率更高的做法&…

俞永福卸任阿里大文娛董事長,改任 eWTP 投資組長

兩天前&#xff08;11月13日&#xff09;&#xff0c;阿里文娛董事長俞永福離職的消息&#xff0c;在互聯網圈炸了鍋。但很快&#xff0c;俞本人就在微博做了澄清&#xff0c;并稱“永遠幸福&#xff0c;我不會離開”。然而就在今天&#xff08;11月15日&#xff09;&#xff0…

[轉載] java提取字符串中的字母數字

參考鏈接&#xff1a; 使用Regex檢查字符串在Java中是否僅包含字母 String str "adsf adS DFASFSADF阿德斯防守對方asdfsadf37《&#xff1f;&#xff1a;&#xff1f;%#&#xffe5;%#&#xffe5;%#$%#$%^><?1234"; str str.replaceAll("[^a-zA-…

snort的詳細配置

前一段一直在做snort入侵檢測系統的安裝以及配置&#xff0c;看了很多的網上資料&#xff0c;也算是總結了下前輩的經驗吧。需要的軟件包&#xff1a;1、httpd-2.2.6.tar.gz2、mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gz3、php-5.2.4.tar.bz24、acid-0.9.6b23.tar.gz5、ad…

[轉載] Java:獲取數組中的子數組的多種方法

參考鏈接&#xff1a; Java中的數組Array 我的個人博客&#xff1a;zhang0peter的個人博客 Java&#xff1a;從一個數組中創建子數組 使用Arrays.copyOfRange函數 Arrays.copyOfRange支持&#xff1a;boolean[]&#xff0c; byte[] &#xff0c;char[]&#xff0c;double…

[轉載] Java中Array(數組)轉List(集合類)的幾種方法

參考鏈接&#xff1a; Java中的數組類Array 1、循環。新建List類&#xff0c;循環填充。 2、利用Arrays類的靜態方法asList()。 Arrays.asList(T[])返回Arrays類的一個內部內List(T)&#xff0c;此類繼承自AbstractList&#xff0c;不可增刪。若想要一個可以增刪的List類&am…

Linux查看系統cpu個數、核心書、線程數

Linux查看系統cpu個數、核心書、線程數 現在cpu核心數、線程數越來越高&#xff0c;本文將帶你了解如何確定一臺服務器有多少個cpu、每個cpu有幾個核心、每個核心有幾個線程。 查看物理cpu個數 cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看核…

[轉載] java中數組的反射的探究

參考鏈接&#xff1a; Java中的反射數組類reflect.Array 數組的反射有什么用呢&#xff1f;何時需要使用數組的反射呢&#xff1f;先來看下下面的代碼&#xff1a; Integer[] nums {1, 2, 3, 4}; Object[] objs nums; //這里能自動的將Integer[]轉成Object[] Object obj n…