資源描述:
《Java初學者的30個常見問題.docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、Java初學者的30個常見問題 本文回答了30個Java入門級初學者的常見問題。我可以用%除以一個小數(shù)嗎?a+=b和a=a+b的效果有區(qū)別嗎?聲明一個數(shù)組為什么需要花費大量時間?為什么Java庫不用隨機pivot方式的快速排序? 1.2基本數(shù)據(jù)類型 Q.為什么-0/3結(jié)果是0,而-0.0/3.0結(jié)果是-0.0?(注意后邊的結(jié)果0帶負號) A.在Java里,整數(shù)是用補碼表示的。在補碼中0只有一種表示方法。另一方面,浮點數(shù)則是用IEEE標準表示的,對于0有兩種表示方法,0和-0。 Q.我可以
2、用%除以一個小數(shù)嗎? A.當然可以。比如,如果angle是一個非負數(shù),那么angle%(2*Math.PI)就會把angle轉(zhuǎn)換到0到2π之間?! .當ab都是基本類型變量時,a+=b和a=a+b的效果有區(qū)別嗎? A.當a和b的類型不同時,那兩條語句的效果就可能有區(qū)別。a+=b等同于a=(int)(a+b),這種情況下可以是a是int型,b是float型。但是同等情況下a=a+b就會編譯報錯。 1.3條件語句和循環(huán)語句 Q.為什么判斷字符串相等不能使用==? A.這反映了基礎(chǔ)類型(int
3、,double,boolean)和引用類型(String)的區(qū)別?! .有沒有在什么情況下,一條語句塊的花括號不能省略的? A.在下面的例子中,第一段代碼是合法的,第二段代碼會引發(fā)編譯錯誤。從技術(shù)角度說,那一條語句是一個變量聲明,而不是語句,所以會報錯?! ?.//legal 2.for(inti=0;i<=N;i++){ 3.intx=5; 4.} 5. 6.//illegal 7.for(inti=0;i<=N;i++) 8.intx=5; Q.在下面的兩段代碼里,有沒有情況
4、,它們的效果不一樣? 1.for(;){ 2. 3.} 4. 5.; 6.while(){ 7. 8. 9.} A.有的。如果在循環(huán)塊里使用continue語句。在for的代碼里,計數(shù)器會加一;而在while的代碼里,因為被continue略過了,計數(shù)器不加一。 1.4數(shù)組
5、Q.某些Java開發(fā)人員使用inta[]而不是int[]a去聲明一個數(shù)組。這兩者有什么區(qū)別? A.在Java中這兩種用法都是合法的,他們的作用都是一樣的。前者是在C中的定義數(shù)組的方法。后者是JAVA推薦的方法,因為它的寫法int[]更能表明這是一個int的數(shù)組?! .為什么數(shù)組下標從0開始而不是從1開始? A.這種傳統(tǒng)起源于機器語言的編程方法。在機器語言中,數(shù)組下標被用來計算元素位置與第一個元素之間的偏移量。如果從1開始的話,計算偏移時還需要做一次減法運算,那是種浪費?! .如果我用負數(shù)作為
6、數(shù)組下標會發(fā)生什么事? A.下標小于0或者大于等于數(shù)組長度,JAVA運行時會拋出ArrayIndexOutOfBoundsException異常,并且中止程序運行?! .使用數(shù)組時還有其他需要注意的陷阱嗎? A.需要記住,JAVA在你創(chuàng)建一個數(shù)組時會去初始化它,所以聲明一個數(shù)組需要O(N)的時間?! .既然a[]是一個數(shù)組,為什么System.out.println(a)會打印出一個16進制的數(shù),就像@f62373這樣,而不是打印出數(shù)組的元素? A.好問題。這條語句打印出的是數(shù)組在內(nèi)存中的
7、地址,不幸的是,在絕大多數(shù)情況下,這不是你需要的?! ?.5輸入輸出語句 Q.我可以從標準input中重新讀一次數(shù)據(jù)嗎? A.不可以,你只能讀一次?! .怎樣輸入end-of-file(eof)符號? A.操作系統(tǒng)自動包括它了?! .使用printf()時還有哪些用法? A.對于整數(shù)來說,使用o輸出八進制,使用x輸出十六進制。對于浮點數(shù)來說,使用e或者g輸出科學計數(shù)法形式。 Q.行結(jié)束的符號是什么? A.不同的文件系統(tǒng)使用了不同的符號。在Unix系統(tǒng)上,新行的符號是'';在Win
8、dows系統(tǒng)上,每一行都有兩個字符組成的字符串終結(jié)"r";在Macs系統(tǒng)上,終結(jié)符號是"r"。如果要打印行號,可以使用System.out.println(),或者使用下面的語句得到當前操作系統(tǒng)下的行結(jié)束符: 1.StringNEWLINE=System.getProperty("line.separator"); Q.下面兩種寫法,哪一種更有效率? 1.Strings; 2.while(!StdIn.isEmpty()){while(!StdIn