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