更新時間:2022-12-23 15:01:09 來源:動力節點 瀏覽1087次
1.String類可以被繼承嗎?
不能。String類在聲明中使用final關鍵字修飾符。使用final關鍵字修飾的類無法被繼承。
Java語言的開發者為什么要將String類定義為final類呢?
•因為當字符串是不可變的,字符串池才有可能實現。字符串池的實現可以在運行時節約很多的堆空間,因為不懂的字符串變量都指向池中的同一個字符串。如果字符串是可變的,那么字符串的駐留將不可能實現,因為這樣的話,
如果變量改變了它的值,那么其他指向這個值的變量也會一起改變。如果字符串是可變的那邊會引起很嚴重的安全問題。
•因為字符串是不可變的,所以是多線程安全的。同一個字符串實例可以可以被多個線程共享。這樣便不用因為線程安全問題而使用同步。
•因為字符串是不可變的,所以在它創建的時候HashCode就被緩存了,不需要重新計算。這就使得字符串很適合作為Map中的鍵,字符串中的處理速度要快于其他的鍵對象。這就是HashMap中的鍵往往都使用字符串。
2.final修飾符在Java中有什么用?
•final修飾的變量叫做常量,常量必須初始化,初始化后的值不能被修改。
•final修飾的方法不能被重載也不能被重寫。
•final修飾的類叫最終類,該類不能被繼承。
3.JDK和JRE有什么區別?
JDK:Java Development Kit的簡稱,Java開發工具包,包含Java開發環境和運行環境。
JRE:Java Runtime Enviroment的簡稱,Java運行環境,為Java的運行提供了所需的環境。
4.==和equals的區別是什么?
•==對于基本數據類型和引用類型的作用效果是不同,對于基本數據類型比較的值是否相等,對于引用類型比較的應用是否相等。
•equals默認情況先比較的引用是否相等,只是很多類重寫了Object類的equals方法,比如String,Integer把equals方法變成了比較的值是否相等,所以一般情況下equals比較的是值是否相等。
5.&和&&的區別?
&和&&在程序中最終的運算結果是一致的,區別在于:
•&運算符是:邏輯與,&不管左邊表達式的結果是true還是false,右邊的表達式都一定會執行;&運算符還可以使用在二進制位運算上。
•&&運算符是:短路與,&&運算符當左邊的表達式結果是false時,右邊的表達式不執行,存在短路現象。
6.重載(overload)和重寫(override)的區別?
方法的重載和重寫都是實現多態的方式,區別在于:
•重載實現的是編譯時的多態性;重載發生在一個類中,同名的方法如果有不同的參數列表(參數個數,參數類型,順序不同)則視為重載。
•重載實現的是運行時的多態性;重寫發生在子類與父類之間,重寫要求子類重寫父類的方法后與父類重寫的方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。
方法重寫的規則:
•參數列表、方法名、返回值類型必須完全一致;
•構造方法不能被重寫;
•聲明為 final 的方法不能被重寫;
•聲明為 static 的方法不存在重寫(重寫和多態聯合才有意義);
•訪問權限不能比父類更低;
•重寫之后的方法不能拋出更寬泛的異常;
7.抽象類(abstract)和接口(interface)有何異同?
•在實現方面:抽象類的子類用extends關鍵字來繼承;接口必須使用impelements關鍵字來實現接口。
•關于構造函數:抽象類可以有構造函數,接口不能有。
•關于main方法:抽象了可以有mian方法,并且我們能夠運行它,但接口不能有。
•在實現數量:類可以實現多個接口,但只能繼承一個抽象類。
•關于訪問修飾符:接口中的方法默認的修飾符是public;抽象類中的訪問修飾符可以是任意訪問修飾符。
8.String str = "i" 和String str = new String("1")一樣嗎?
不一樣,因為內存的分配方式不一樣。String str = "i"的方式JVM會將其分配到常量池中,而String str = new String("i")JVM會將其分配到堆內存中。
9.闡述靜態變量和實例變量的區別?
不管創建多少個對象,靜態變量在內存中有且僅有一個;實例變量必須依存于某一實例,需要先創建對象然后通過對象才能訪問到它。靜態變量可以實現讓多個對象共享內存。
10.String s = "Hello";s = s + " world!";這兩行代碼執行后,原始的 String 對象中的內容變了沒有?
沒有,因為 String被設計成不可變類,所以它的所有對象都是不可變對象。在這段代碼中,s原先指向一個 String 對象,內容是 "Hello",然后對 s 進行了“+”操作,但是 s 所指向的那個對象是還是沒有改變,這時s不指向原來那個對象,而指向了另一個 String 對象,內容為"Hello world!",原來那個對象還存在于內存之中,只是 s 這個引用變量不再指向它。
11.Java 中操作字符串都有哪些類?它們之間有什么區別?
操作字符串的類有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的區別在于 String 聲明的是不可變的對象,每次操作都會生成新的 String 對象,再將指針指向新的 String 對象,而 StringBuffer 、 StringBuilder 可以在原有對象的基礎上進行操作,所以在經常改變字符串內容的情況下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的區別在于,StringBuffer 是線程安全的,而 StringBuilder 是非線程安全的,但 StringBuilder 的性能卻高于 StringBuffer,所以在單線程環境下推薦使用 StringBuilder,多線程環境下推薦使用 StringBuffer。
以上就是“Java基礎面試題及答案,只看這篇就夠了”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習