1. 程式人生 > >那些隱藏的比較深的JAVA基本功裝逼姿勢,要面試的來看看

那些隱藏的比較深的JAVA基本功裝逼姿勢,要面試的來看看

float f=3.4;是否正確? 
答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.4; 或者寫成float f =3.4F;。


訪問修飾符public,private,protected,以及不寫(預設)時的區別? 
答:

修飾符	當前類	同 包	子 類	其他包
public	√	√	√	√
protected	√	√	√	×
default	√	√	×	×
private	√	×	×	×


按位與		a & b    相同位的兩個數字都為1,則為1;若有一個不為1,則為0。
按位或		a | b    相同位只要一個為1即為1。
按位異或	a ^ b    相同位不同則為1,相同則為0
按位取反	~a       記憶體中的0和1全部取反
左移		a << b   乘a * 2的b次方
帶符號右移	a >> b   a除以2的b次方(取整)</span>
無符號右移	a>>> b   
是否可以繼承String類? 
答:String 類是final類,不可以被繼承。

補充:繼承String本身就是一個錯誤的行為,對String型別最好的重用方式是關聯關係(Has-A)和依賴關係(Use-A)而不是繼承關係(Is-A)。

過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分? 
答:方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。過載對返回型別沒有特殊的要求。

String s = new String("xyz");建立了幾個字串物件? 
答:兩個物件,一個是靜態區的"xyz",一個是用new建立在堆上的物件。

解釋記憶體中的棧(stack)、堆(heap)和靜態區(static area)的用法。
stack: 通常我們定義一個基本資料型別的變數,一個物件的引用,還有就是函式呼叫的現場儲存都使用記憶體中的棧空間
heap: 而通過new關鍵字和構造器建立的物件放在堆空間
Math.round(11.5) 等於多少?Math.round(-11.5)等於多少? 
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四捨五入的原理是在引數上加0.5然後進行下取整。