一些Java面试题深入分析
一、&和&&的差別?
&和&&都能夠用作邏輯與的運算符。表示邏輯與(and),當運算符兩邊的表達式的結果都為true時。整個運算結果才為true,否則,僅僅要有一方為false,則結果為false。
&&還具有短路的功能,即假設第一個表達式為false,則不再計算第二個表達式,比如,對于if(str != null && !str.equals(“”))表達式,當str為null時,后面的表達式不會運行,所以不會出現NullPointerException假設將&&改為&,則會拋出NullPointerException異常。
If(x==33& ++y>0) y會增長,If(x==33 && ++y>0)不會增長
&不具有短路性質,對于if(str != null && !str.equals(“”))表達式,當str為null時。后面的表達式依舊會運行,所以會出現NullPointerException,除此之外,&還能夠用作位運算符。二、switch語句是否能作用在byte上,是否能作用在long上,是否能作用在String上?
在switch(expr1)中。expr1能夠是 byte, char,?short,int 以及它們的包裝類 Byte ,Character,? Short, Integer,還有enum(枚舉)、String(JavaSE 7添加的)
參考官網http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
三、使用finalkeyword修飾一個變量時。是引用不能變,還是引用的對象不能變?
使用finalkeyword修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容還是能夠改變的。比如,對于例如以下語句:
?final?StringBuffer?a=new?StringBuffer("immutable");
運行例如以下語句將報告編譯期錯誤:
a=new?StringBuffer("");
可是,運行例如以下語句則能夠通過編譯:
a.append("?broken!");?
?
有人在定義方法的參數時,可能想採用例如以下形式來阻止方法內部改動傳進來的參數對象:
public void method(final ?StringBuffer?param)
{
}
實際上,這是辦不到的,在該方法內部仍然能夠添加例如以下代碼來改動參數對象:
??????? param.append("a");
四、當運行String str=new String("abc")。時,究竟創建了多少個String對象?
假設再網上搜答案,差點兒都是這樣回答的:
假設String pool沒有abc這個字符串 的話就在字符串池創建abc的對象,再是在堆里創建一個abc的對象,把堆里的abc對象地址返回給str?這個情況是創建2個對象,否則就僅僅有在堆里創建一個abc的對象
但是。我今天看到一個解說視頻。他說不論什么情況都僅僅創建一個String對象。不論什么情況都不會在字符串池創建abc的對象。論據:
String s1="hjk";String s2=s1.intern(); //intern()的作用是假設在常量池中存在s1的字符串值“hjk”,則//返回該字符串對象。否則在常量池加入“hjk”,并把該字符串對象返回。System.out.println(s2==s1); //trueString s3=new String("abc");String s4=s3.intern();System.out.println(s3==s4); //falseString s5=s3.intern();System.out.println(s5==s4); //true另可參考:Java面試題視頻解說http://study.163.com/course/courseMain.htm?courseId=519065#/courseMain
posted on 2017-04-24 14:29 mthoutai 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/mthoutai/p/6756731.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的一些Java面试题深入分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android攻城狮GestureDet
- 下一篇: 201521123007《Java程序设