Java面试查漏补缺
一、基礎(chǔ)
1、&和&&的區(qū)別。?
【概述】
&&只能用作邏輯與(and)運(yùn)算符(具有短路功能);但是&可以作為邏輯與運(yùn)算符(是“無條件與”,即沒有短路的功能),也可以作為位的與運(yùn)算符。
【詳細(xì)】
相同點(diǎn):&和&&都可以用作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。
不同點(diǎn):
1、&&具有短路的功能,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式,
例如,對于if(str?!=?null?&&?!str.equals(“”))表達(dá)式,當(dāng)str為null時(shí),后面的表達(dá)式不會(huì)執(zhí)行,所以不會(huì)出現(xiàn)NullPointerException;如果將&&改為&,則會(huì)拋出NullPointerException異常。
2、&還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時(shí),&表示按位與操作,我們通常使用0x0f來與一個(gè)整數(shù)進(jìn)行&運(yùn)算,來獲取該整數(shù)的最低4個(gè)bit位, 例如,0x31?&?0x0f的結(jié)果為0x01。?
【備注】:這道題先說兩者的共同點(diǎn),再說出&&和&的特殊之處,并列舉一些經(jīng)典的例子來表明自己理解透徹深入、實(shí)際經(jīng)驗(yàn)豐富。
?
?
2、String s = a+b+c+d+e;創(chuàng)建了幾個(gè)對象的詳細(xì)分析?
具體點(diǎn)擊博文【String s = a+b+c+d+e;創(chuàng)建了幾個(gè)對象的詳細(xì)分析?】
?
3、java對象引用比較?
直接說出以下程序的輸出結(jié)果:
Integer a = 10;
Integer b = 10;
System.out.println(a == b);
Integer x = 156;
Integer y = 156;
System.out.println(x == y);
答案是:True、False
分析:
兩個(gè)Integer對象是不會(huì)自動(dòng)拆包,Integer == Integer不會(huì)自動(dòng)拆包比較的
Integer == int這才會(huì)自動(dòng)拆包。
但是JDK緩存了-128-127這些數(shù)字的對象(類似于一個(gè)pool)
所以a與b的存儲(chǔ)地址都指向同一對象
Integer a = new Integer(1);
Integer b = new Integer(1);
a == b 呢? 答案:False
原因:new Integer()是強(qiáng)制
強(qiáng)制生成一個(gè)新對象
?3、switch語句能否作用在byte上,能否作用在long上,能否作用在String上??
在switch(expr1)中,expr1只能是一個(gè)整數(shù)表達(dá)式(int類型或者可以隱式轉(zhuǎn)化為int類型的數(shù)據(jù)類型(short、byte等))、字符串或者枚舉常量(更大字體),整數(shù)表達(dá)式可以是int基本類型或Integer包裝類型,由于,byte,short,char都可以隱含轉(zhuǎn)換為int,所以,這些類型以及這些類型的包裝類型也是可以的。
【注意】顯然,long類型都不符合switch的語法規(guī)定,并且不能被隱式轉(zhuǎn)換成int類型,所以,它們不能作用于swtich語句中。?
?
?4、Java基本數(shù)據(jù)類型及其類型轉(zhuǎn)換:
?
| 類型名稱 | 類型定義 | 類型取值 |
|---|---|---|
| boolean | 布爾值,作二元判斷 | true,?false |
| byte | 8位有符號(hào)整數(shù) | 最小值-128,最大值127 |
| short | 16位有符號(hào)整數(shù) | 最小值-32768,最大值32767 |
| int | 32位有符號(hào)整數(shù) | 最小值-2147483648(-231),最大值2147483647(231-1) |
| long | 64位有符號(hào)整數(shù) | -263~(263-1) |
| float | 32位浮點(diǎn)數(shù) | 1.4E-45~3.4028235E38 |
| double | 64位浮點(diǎn)數(shù) | 4.9E-324~1.7976931348623157E308 |
| char | 16位Unicode字符 | 不適用 |
?
【注意】float a=1.0 ?//********編譯錯(cuò)誤,1.0默認(rèn)是double類型,轉(zhuǎn)換為float會(huì)出現(xiàn)錯(cuò)誤異常。
?
?
5、short?s1?=?1;?s1?=?s1?+?1;有什么錯(cuò)??short?s1?=?1;?s1?+=?1;有什么錯(cuò)??
對于short?s1?=?1;?s1?=?s1?+?1;?由于s1+1運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類型,所以結(jié)果是int型,再賦值給short類型s1時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。
對于short?s1?=?1;?s1?+=?1;由于?+=?是java語言規(guī)定的運(yùn)算符,java編譯器會(huì)對它進(jìn)行特殊處理,因此可以正確編譯。
?
6、char型變量中能不能存貯一個(gè)中文漢字?為什么??
?
【同第5題是同種類型題】Java中char型變量是用來存儲(chǔ)Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中當(dāng)然可以存儲(chǔ)漢字啦。不過,如果某個(gè)特殊的漢字沒有被包含在unicode編碼字符集中,那么,這個(gè)char型變量中就不能存儲(chǔ)這個(gè)特殊漢字。補(bǔ)充說明:unicode編碼占用兩個(gè)字節(jié),所以,char類型的變量也是占用兩個(gè)字節(jié)。
?
備注:后面一部分回答雖然不是在正面回答題目,但是,為了展現(xiàn)自己的學(xué)識(shí)和表現(xiàn)自己對問題理解的透徹深入,可以回答一些相關(guān)的知識(shí),做到知無不言,言無不盡。?
?
轉(zhuǎn)載于:https://www.cnblogs.com/mo-wang/p/3683331.html
總結(jié)
以上是生活随笔為你收集整理的Java面试查漏补缺的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空调加氟一般多少钱,空调加氟收费标准
- 下一篇: U3D的Collider