基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)
1. 正則表達式
1.1?Java中是如何支持正則表達式操作的?
Java中的String類提供了支持正則表達式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。
此外,Java中可以用Pattern類表示正則表達式對象,它提供了豐富的API進行各種正則表達式操作,如:
import java.util.regex.Matcher; import java.util.regex.Pattern;class RegExpTest {public static void main(String[] args) {String str = "成都市(成華區)(武侯區)(高新區)";Pattern p = Pattern.compile(".*?(?=\\()");Matcher m = p.matcher(str);if(m.find()) {System.out.println(m.group());}} }1.2? 正則表達式及其用途。
在編寫處理字符串的程序時,經常會有查找符合某些復雜規則的字符串的需要。
正則表達式就是用于描述這些規則的工具。
換句話說,正則表達式就是記錄文本規則的代碼。
計算機處理的信息更多的時候不是數值而是字符串,正則表達式就是在進行字符串匹配和處理的時候最為強大的工具,絕大多數語言都提供了對正則表達式的支持。
2. 循環
2.1?在Java中如何跳出當前的多重嵌套循環?
在最外層循環前加一個標記如A,然后用break A;可以跳出多重循環。
(Java中支持帶標簽的break和continue語句,作用有點類似于C和C++中的goto語句,但是就像要避免使用goto一樣,應該避免使用帶標簽的break和continue,因為它不會讓你的程序變得更優雅,很多時候甚至有相反的作用,所以這種語法其實不知道更好)
3.?&和&&的區別?
&運算符有兩種用法:
&&運算符是短路與運算。
邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運算符左右兩端的布爾值都是true整個表達式的值才是true。
&&之所以稱為短路運算是因為,如果&&左邊的表達式的值是false,右邊的表達式會被直接短路掉,不會進行運算。
很多時候我們可能都需要用&&而不是&:
- 例如在驗證用戶登錄時判定用戶名不是null而且不是空字符串,應當寫為:username != null &&!username.equals(""),二者的順序不能交換,更不能用&運算符;
- 因為第一個條件如果不成立,根本不能進行字符串的equals比較,否則會產生NullPointerException異常。
4.?int和Integer有什么區別?
Java是一個近乎純潔的面向對象編程語言,但是為了編程的方便還是引入了基本數據類型,但是為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper class)。
int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。
Java 為每個原始類型提供了包裝類型:
- 原始類型: boolean,char,byte,short,int,long,float,double
- 包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。
引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。
- 對象引用實例變量的缺省值為null;
- 原始類型實例變量的缺省值與它們的類型有關。
4.1?Java支持的數據類型有哪些?什么是自動拆裝箱?
支持的數據類型:boolean,char,byte,short,int,long,float,double。
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成Double,等等。反之就是自動拆箱。
5. String、StringBuffer、StringBuilder
5.1 String 和StringBuffer的區別?
JAVA 平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。
這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。
當你知道字符數據要改變的時候你就可以使用StringBuffer。
典型地,你可以使用StringBuffers來動態構造字符數據。
5.2?StringBuffer和StringBuilder有什么區別,底層實現上呢?
StringBuffer線程安全,StringBuilder線程不安全,底層實現上的話,StringBuffer其實就是比StringBuilder多了Synchronized修飾符。
5.1?String是最基本的數據類型嗎?
基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。
為了提高效率節省空間,我們應該用StringBuffer類。
5.3?String是否能能繼承?
不能,char數組用final修飾的。
5.4?String為什么不可變?
不可變對象是指一個對象的狀態在對象被創建之后就不再變化。
不可改變的意思就是說:不能改變對象內的成員變量,包括基本數據類型的值不能改變,引用類型的變量不能指向其他的對象,引用類型指向的對象的狀態也不能改變。
String 不可變是因為在 JDK 中 String 類被聲明為一個 final 類,且類內部的 value 字節數組也是 final 的。
只有當字符串是不可變時字符串池才有可能實現,字符串池的實現可以在運行時節約很多 heap 空間,因為不同的字符串變量都指向池中的同一個字符串;
如果字符串是可變的則會引起很嚴重的安全問題,譬如數據庫的用戶名密碼都是以字符串的形式傳入來獲得數據庫的連接,或者在 socket 編程中主機名和端口都是以字符串的形式傳入,因為字符串是不可變的,所以它的值是不可改變的,否則黑客們可以鉆到空子改變字符串指向的對象的值造成安全漏洞;
因為字符串是不可變的,所以是多線程安全的,同一個字符串實例可以被多個線程共享,這樣便不用因為線程安全問題而使用同步,字符串自己便是線程安全的;
因為字符串是不可變的所以在它創建的時候 hashcode 就被緩存了,不變性也保證了 hash 碼的唯一性,不需要重新計算,這就使得字符串很適合作為 Map 的鍵,字符串的處理速度要快過其它的鍵對象,這就是 HashMap 中的鍵往往都使用字符串的原因。
6. 數組(Array)和列表(ArrayList)的區別?什么時候應該使用Array而不是ArrayList?
Array和ArrayList的不同點:
- Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
- Array大小是固定的,ArrayList的大小是動態變化的。
- ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
對于基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。
7.?什么是值傳遞和引用傳遞?
值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量。
引用傳遞一般是對于對象型變量而言的,傳遞的是該對象地址的一個副本,并不是原對象本身 。 所以對引用對象進行操作會同時改變原對象.
一般認為,java內的傳遞都是值傳遞。
7.1?請判斷當一個對象被當作參數傳遞給一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?
是值傳遞。
Java 編程語言只有值傳遞參數。
當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。
對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
8.?為什么會出現4.0-3.6=0.40000001這種現象?
原因簡單來說是這樣:2進制的小數無法精確的表達10進制小數,計算機在計算10進制小數的過程中要先轉換為2進制進行計算,這個過程中出現了誤差。
8.1?一個十進制的數在內存中是怎么存的?
補碼的形式。
9.?Lamda表達式的優缺點。
優點:
- 簡潔
- 非常容易并行計算
- 可能代表未來的編程趨勢
缺點:
- 若不用并行計算,很多時候計算速度沒有比傳統的 for 循環快。(并行計算有時需要預熱才顯示出效率優勢)
- 不容易調試
- 若其他程序員沒有學過 lambda 表達式,代碼不容易讓其他語言的程序員看懂。
10.?java8的新特性
?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题库练习7(最小公倍数、求立方根、字符串
- 下一篇: 关键字回顾(final/finally/