java面試題目_java經(jīng)典面試題
Java工程師在求職面試中,想要得到面試官的肯定,那么做好面試準(zhǔn)備,了解面試題目很有必要。下面小編已經(jīng)為你們整理了java面試題目,一起來看看吧。
java面試題目一
1、String 是最基本的數(shù)據(jù)類型嗎?
答:不是。Java中的基本數(shù)據(jù)類型只有8個(gè):byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
2、float f=3.4;是否正確?
答:不正確。3.4是雙精度數(shù),將雙精度型(double)賦值給浮點(diǎn)型(float)屬于下轉(zhuǎn)型(down-casting,也稱為窄化)會(huì)造成精度損失,因此需要強(qiáng)制類型轉(zhuǎn)換float f =(float)3.4; 或者寫成float f =3.4F;。
3、short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎?short s1 = 1; s1 += 1;有錯(cuò)嗎?
答:對(duì)于short s1 = 1; s1 = s1 + 1;由于1是int類型,因此s1+1運(yùn)算結(jié)果也是int 型,需要強(qiáng)制轉(zhuǎn)換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因?yàn)閟1+= 1;相當(dāng)于s1 = (short)(s1 + 1);其中有隱含的強(qiáng)制類型轉(zhuǎn)換。
4、Java有沒有g(shù)oto?
答:goto 是Java中的保留字,在目前版本的Java中沒有使用。(根據(jù)James Gosling(Java之父)編寫的《The Java Programming Language》一書的附錄中給出了一個(gè)Java關(guān)鍵字列表,其中有g(shù)oto和const,但是這兩個(gè)是目前無法使用的關(guān)鍵字,因此有些地方將其稱之為保留字,其實(shí)保留字這個(gè)詞應(yīng)該有更廣泛的意義,因?yàn)槭煜語(yǔ)言的程序員都知道,在系統(tǒng)類庫(kù)中使用過的有特殊意義的單詞或單詞的組合都被視為保留字)
java面試題目二
1、&和&&的區(qū)別?
答:&運(yùn)算符有兩種用法:(1)按位與;(2)邏輯與。&&運(yùn)算符是短路與運(yùn)算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運(yùn)算符左右兩端的布爾值都是true整個(gè)表達(dá)式的值才是true。&&之所以稱為短路運(yùn)算是因?yàn)?,如?amp;&左邊的表達(dá)式的值是false,右邊的表達(dá)式會(huì)被直接短路掉,不會(huì)進(jìn)行運(yùn)算。很多時(shí)候我們可能都需要用&&而不是&,例如在驗(yàn)證用戶登錄時(shí)判定用戶名不是null而且不是空字符串,應(yīng)當(dāng)寫為:username != null &&!username.equals(“”),二者的順序不能交換,更不能用&運(yùn)算符,因?yàn)榈谝粋€(gè)條件如果不成立,根本不能進(jìn)行字符串的equals比較,否則會(huì)產(chǎn)生NullPointerException異常。注意:邏輯或運(yùn)算符(|)和短路或運(yùn)算符(||)的差別也是如此。
補(bǔ)充:如果你熟悉JavaScript,那你可能更能感受到短路運(yùn)算的強(qiáng)大,想成為JavaScript的高手就先從玩轉(zhuǎn)短路運(yùn)算開始吧。
2、解釋內(nèi)存中的棧(stack)、堆(heap)和靜態(tài)區(qū)(static area)的用法。
答:通常我們定義一個(gè)基本數(shù)據(jù)類型的變量,一個(gè)對(duì)象的引用,還有就是函數(shù)調(diào)用的現(xiàn)場(chǎng)保存都使用內(nèi)存中的??臻g;而通過new關(guān)鍵字和構(gòu)造器創(chuàng)建的對(duì)象放在堆空間;程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態(tài)區(qū)中。??臻g操作起來最快但是棧很小,通常大量的對(duì)象都是放在堆空間,理論上整個(gè)內(nèi)存沒有被其他進(jìn)程使用的空間甚至硬盤上的虛擬內(nèi)存都可以被當(dāng)成堆空間來使用。
1String str = new String("hello");
上面的語(yǔ)句中變量str放在棧上,用new創(chuàng)建出來的字符串對(duì)象放在堆上,而”hello”這個(gè)字面量放在靜態(tài)區(qū)。
補(bǔ)充:較新版本的Java(從Java 6的某個(gè)更新開始)中使用了一項(xiàng)叫”逃逸分析”的技術(shù),可以將一些局部對(duì)象放在棧上以提升對(duì)象的操作性能。
3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數(shù)上加0.5然后進(jìn)行下取整。
4、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。從Java 5開始,Java中引入了枚舉類型,expr也可以是enum類型,從Java 7開始,expr還可以是字符串(String),但是長(zhǎng)整型(long)在目前所有的版本中都是不可以的。
java面試題目三
1、數(shù)組有沒有l(wèi)ength()方法?String有沒有l(wèi)ength()方法?
答:數(shù)組沒有l(wèi)ength()方法,有l(wèi)ength 的屬性。String 有l(wèi)ength()方法。JavaScript中,獲得字符串的長(zhǎng)度是通過length屬性得到的,這一點(diǎn)容易和Java混淆。
2、在Java中,如何跳出當(dāng)前的多重嵌套循環(huán)?
答:在最外層循環(huán)前加一個(gè)標(biāo)記如A,然后用break A;可以跳出多重循環(huán)。(Java中支持帶標(biāo)簽的break和continue語(yǔ)句,作用有點(diǎn)類似于C和C++中的goto語(yǔ)句,但是就像要避免使用goto一樣,應(yīng)該避免使用帶標(biāo)簽的break和continue,因?yàn)樗粫?huì)讓你的程序變得更優(yōu)雅,很多時(shí)候甚至有相反的作用,所以這種語(yǔ)法其實(shí)不知道更好)
3、構(gòu)造器(constructor)是否可被重寫(override)?
答:構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。
4、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)?
答:不對(duì),如果兩個(gè)對(duì)象x和y滿足x.equals(y) == true,它們的哈希碼(hash code)應(yīng)當(dāng)相同。Java對(duì)于eqauls方法和hashCode方法是這樣規(guī)定的:(1)如果兩個(gè)對(duì)象相同(equals方法返回true),那么它們的hashCode值一定要相同;(2)如果兩個(gè)對(duì)象的hashCode相同,它們并不一定相同。當(dāng)然,你未必要按照要求去做,但是如果你違背了上述原則就會(huì)發(fā)現(xiàn)在使用容器時(shí),相同的對(duì)象可以出現(xiàn)在Set集合中,同時(shí)增加新元素的效率會(huì)大大下降(對(duì)于使用哈希存儲(chǔ)的系統(tǒng),如果哈希碼頻繁的沖突將會(huì)造成存取性能急劇下降)。
補(bǔ)充:關(guān)于equals和hashCode方法,很多Java程序都知道,但很多人也就是僅僅知道而已,在Joshua Bloch的大作《Effective Java》(很多軟件公司,《Effective Java》、《Java編程思想》以及《重構(gòu):改善既有代碼質(zhì)量》是Java程序員必看書籍,如果你還沒看過,那就趕緊去亞馬遜買一本吧)中是這樣介紹equals方法的:首先equals方法必須滿足自反性(x.equals(x)必須返回true)、對(duì)稱性(x.equals(y)返回true時(shí),y.equals(x)也必須返回true)、傳遞性(x.equals(y)和y.equals(z)都返回true時(shí),x.equals(z)也必須返回true)和一致性(當(dāng)x和y引用的對(duì)象信息沒有被修改時(shí),多次調(diào)用x.equals(y)應(yīng)該得到同樣的返回值),而且對(duì)于任何非null值的引用x,x.equals(null)必須返回false。實(shí)現(xiàn)高質(zhì)量的equals方法的訣竅包括:1. 使用==操作符檢查”參數(shù)是否為這個(gè)對(duì)象的引用”;2. 使用instanceof操作符檢查”參數(shù)是否為正確的類型”;3. 對(duì)于類中的關(guān)鍵屬性,檢查參數(shù)傳入對(duì)象的屬性是否與之相匹配;4. 編寫完equals方法后,問自己它是否滿足對(duì)稱性、傳遞性、一致性;5. 重寫equals時(shí)總是要重寫hashCode;6. 不要將equals方法參數(shù)中的Object對(duì)象替換為其他的類型,在重寫時(shí)不要忘掉@Override注解。
5、是否可以繼承String類?
答:String 類是final類,不可以被繼承。
補(bǔ)充:繼承String本身就是一個(gè)錯(cuò)誤的行為,對(duì)String類型最好的重用方式是關(guān)聯(lián)關(guān)系(Has-A)和依賴關(guān)系(Use-A)而不是繼承關(guān)系(Is-A)。
看了“java面試題目”