又爽又黄A片免费观看直播蜜桃,欧美性猛交XXXX乱大交蜜桃,无码人妻精品一区二区蜜桃在线看,国内精品人妻无码久久久影院蜜桃,亚洲精品久久久蜜桃,久久99精品久久久久久水蜜桃,欧美丰满少妇猛烈进入A片蜜桃,蜜桃一区二区三区,WWW.17C嫩嫩草色视频蜜桃

您所在的(de)位置:首頁 > 解決方案

Java初學者的(de)30個(gè)常見(jiàn)問(wèn)題

  • 信息提供:網格軟件(jiàn)
  • 上(shàng)傳時(shí)間(jiān"∑):2017-04-03
1.2 基本數(shù)據類型

Q. 為(wèi)什(shén)麽 -0/3 結果是(shì) 0,而♦≈¶  -0.0/3.0 結果是(shì) -0.0∞σ♥?(注意後邊的(de)結果0帶負号)

A. 在Java裡(lǐ),整數(shù)是(shì)€α™↑用(yòng)補碼表示的(de)。在補碼中0₹≠隻有(yǒu)一(yī)種表示方法。另一(yī)方面Ω‌'$,浮點數(shù)則是(shì)用(yòng) IEEE 标準表示的(d♣ππ↓e), 對(duì)于0有(yǒu)兩種表示方法, 0 和(hé)•​ -0。

Q. 我可(kě)以用(yòng) % 除以一(yī)個(gè)小∞≤δ(xiǎo)數(shù)嗎(ma)?

A. 當然可(kě)以。比如(rú),如(rú)果 angle™±₽♠ 是(shì)一(yī)個(gè)非負數(shù),那(nà)麽¥×∑± angle % (2 * Math.PI) 就(jiù)會 ©(huì)把 angle 轉換到(dào) 0αΩ¶$ 到(dào)  2 π 之間(jiān)。

Q. 當 a b 都(dōu)是(shì≤Ω≈÷)基本類型變量時(shí),a += b 和(hé) a = a + ♥∑>‌b 的(de)效果有(yǒu)區(qū)别嗎(ma)?

A. 當 a 和(hé) b 的(de)類型不(bù)同時(shí),那(n±✘¥✘à)兩條語句的(de)效果就(jiù)可(kě)能(nén®★g)有(yǒu)區(qū)别。 a += b 等同于 a = (☆∏int) (a + b),這(zhè)種情況下(xπ✘β ià)可(kě)以是(shì) a是(sh×★ì)int型,b是(shì)float型。×∞但(dàn)是(shì)同等情況下(xià) a = a + bΩ≈φ 就(jiù)會(huì)編譯報(bào)錯(cuò)。

1.3 條件(jiàn)語句和(hé)循環語£π句

Q. 為(wèi)什(shén)麽判斷字符串相(x≥☆©✘iàng)等不(bù)能(néng)使用(yòng) == ?

A. 這(zhè)反映了(le)基礎類型(int, doubl≥'¶↕e, boolean)和(hé)引用(yòng)類型₽Ω(String)的(de)區(qū)别。

Q. 有(yǒu)沒有(yǒu)在什(shén)麽情況下(x ×★∏ià),一(yī)條語句塊的(de)花(huā)括号不(bù§‌)能(néng)省略的(de)?

A. 在下(xià)面的(de)例子(zǐ)中,第一(y₹♦₹×ī)段代碼是(shì)合法的(de),第二段代碼會(h•¥&uì)引發編譯錯(cuò)誤。從(cóng)技(jì)∑&≥術(shù)角度說(shuō),那(nà)一(yī)條語•π句是(shì)一(yī)個(gè)變量聲明(mínΩφg),而不(bù)是(shì)語句,所以σ♠會(huì)報(bào)錯(cuò)。
複制(zhì)代碼
// legal for (int i =±£±∑ 0; i <= N; i++) { int x = 5; ‌✔} // illegal for (int i = 0; i &↕©≤×lt;= N; i++) int x = 5;
複制(zhì)代碼

Q. 在下(xià)面的(de)兩段代碼裡(lǐ),有(yǒu)沒有(yǒ®✔u)情況,它們的(de)效果不(bù)一(yī)樣?
複制(zhì)代碼
for (<init stmnt> <boolean ex™∞pr>; <incr stmnt>) { <body →×statements> } <init stmnt‌​♠¶>; while (<booleφ​✔an expr>) { <body s₽←tatements>    <incr∑≥ stmnt> }
複制(zhì)代碼

A. 有(yǒu)的(de)。如(rú)果在循環塊裡(lǐ)使用(yòng)•λ continue 語句。在for的(de)代碼裡(lǐ),計(jì)數(s‍×§hù)器(qì)會(huì)加一(yī);而在​ while的(de)代碼裡(lǐ),因為(wèi)被π ≈∑continue略過了(le),計(jì)數(shù)器(qì)不(b φ&ù)加一(yī)。
 
1.4  數(shù)組

Q. 某些(xiē)Java開(kāi)發人(rén)員(yu ±←án)使用(yòng) int a[] 而不(bù)是(shì) ↓≈®int[] a 去(qù)聲明(míng)一(yī)個(gβΩè)數(shù)組。這(zhè)兩者有('α>♥yǒu)什(shén)麽區(qū)别?

A. 在Java中這(zhè)兩種用(yòng)法都(dōu)是('"♥¶shì)合法的(de),他(tā)們的(de)作(zuò)用(yו™←òng)都(dōu)是(shì)一(yī)樣的(de)。前者是(shì)在C'♠γ∑中的(de)定義數(shù)組的(de)方法。後者是(shì)↓₽αεJAVA推薦的(de)方法,因為(wèi)它的(de)寫法★±≤ε int[] 更能(néng)表明(míng)這(£₹✔zhè)是(shì)一(yī)個(gè) int 的(d₹↑e)數(shù)組。

Q. 為(wèi)什(shén)麽數(shù)組下(xià)标從(có>♠£₩ng)0 開(kāi)始 而不(bù)是(shì)從(cóng) 1 ☆δ開(kāi)始?

A. 這(zhè)種傳統起源于機(jī)器(¶÷‍qì)語言的(de)編程方法。在機(jī)器(q∑™ì)語言中,數(shù)組下(xià)标被用(yò ↔ng)來(lái)計(jì)算(suàn)元素位置與第一(yī)個(gè) ∞φ元素之間(jiān)的(de)偏移量。如(rú)果從(cóng)1£♠><開(kāi)始的(de)話(huà),計(jì)算(suàn)偏移ε₩©時(shí)還(hái)需要(yào)做≈δ±¶(zuò)一(yī)次減法運算(suàn),☆∏那(nà)是(shì)種浪費(fèi)。

Q. 如(rú)果我用(yòng) 負數(shù) 作(zuò)為(wè≈​∏δi)數(shù)組下(xià)标會(huì)發生(shΩ¶ēng)什(shén)麽事(shì)?

A. 下(xià)标小(xiǎo)于0 或者 大(d♣♣à)于等于數(shù)組長(cháng)度,JA§ε☆VA運行(xíng)時(shí)會(huì)抛出 Arra÷©≠↕yIndexOutOfBoundsException 異β£常,并且中止程序運行(xíng)。

Q. 使用(yòng)數(shù)組時(shí)還(hái)有(≠♦yǒu)其他(tā)需要(yào)注意的(de)陷阱嗎(ma)ε±♠?

A. 需要(yào)記住,JAVA在你(nǐ)創建一(yī)個(gè♠π÷)數(shù)組時(shí)會(huì)去(qù÷♣α")初始化(huà)它,所以聲明(míng)一α★¥₽(yī)個(gè)數(shù)組需要(yào) O(N)的(de)時($§€≈shí)間(jiān)。

Q. 既然 a[] 是(shì)一(yī)個(gè)數(shù)λ♣組,為(wèi)什(shén)麽 System.out.↔αφ♠println(a) 會(huì)打印出一(yī)個(gè)16進制(≥‍&zhì)的(de)數(shù),就(jiù)像 @f62εε↔373 這(zhè)樣,而不(bù)是(shì)打印出數(shù)組的(de)∑ε©元素?

A. 好(hǎo)問(wèn)題。這(z≥↑φ₹hè)條語句打印出的(de)是(shì) ₽×φ 數(shù)組在內(nèi)存中的(de<¥)地(dì)址,不(bù)幸的(de)是(shì),♠≥σ™在絕大(dà)多(duō)數(shù)情況下(xià),這(zhè)不↔£∑(bù)是(shì)你(nǐ)需要(yào)的(de)。
 
1.5 輸入輸出語句

Q. 我可(kě)以從(cóng)标準input中重新讀(✔ dú)一(yī)次數(shù)據嗎(ma)?

A. 不(bù)可(kě)以,你(nǐ)隻能(néng)讀(dú) ©一(yī)次。

Q. 怎樣輸入 end-of-file (eof) ©←♦λ符号?

A. 操作(zuò)系統自(zì)動包括它了(le)。

Q. 使用(yòng) printf() 時(shí)還(hái¶φφ)有(yǒu)哪些(xiē)用(yòng)法?

A. 對(duì)于整數(shù)來(lái)說(sh "♣≠uō),使用(yòng) o 輸出八進制(zhì),使用(yòng) xα" 輸出十六進制(zhì)。對(duì)于浮點數(shù)來(lái)說(sh♣Ω÷uō),使用(yòng) e 或者 g 輸出科(kē®↓)學計(jì)數(shù)法形式。

Q. 行(xíng)結束的(de)符号是(shì<•)什(shén)麽?

A. 不(bù)同的(de)文(wén)件(jiàn)系統使用(yòng)♦ ≠了(le)不(bù)同的(de)符号。在 Unix 系統上(shàng),新行•€σ(xíng)的(de)符号是(shì) '\n' ;在 Windows © ←系統上(shàng),每一(yī)行(xíng)都(dōu)&>有(yǒu)兩個(gè)字符組成的(de)字符串終結 "\r\n"φΩ® ;在 Macs 系統上(shàng),終結符号是("•​shì) "\n\r" 。如(rú)果要(yào)打✔>印行(xíng)号,可(kě)以使用(yòng) Systemσφ.out.println() ,或者使用'‍(yòng)下(xià)面的(de)語句得(de)<→φ到(dào)當前操作(zuò)系統下(xi><'®à)的(de)行(xíng)結束符:
String NEWLINE = System.getPr"π✔✔operty("line.separat≠★♦∑or");
Q. 下(xià)面兩種寫法,哪一(yī)種更有(yǒu•λβ)效率?
String s;       &nbs₩‌ φp;        ₹•™;       &§✘nbsp;  while (!StdIn.isEm<&♣™pty()) {     &λ¥nbsp;  while (!StdIn.isEmpty↔₩∑()) {     s = StdIn.rea‌♠dString();     &©→nbsp;     String s = StdIn.₩₩↑γreadString();    β±'; ...         &nbs¶λε&p;         ←♠∞₹          &π≈nbsp; ... }       &nbs€σΩ×p;     &nbs>∑p;         &nb±×↕sp;         }
A. 從(cóng)效率角度說(shuō≈γ≥),兩者沒有(yǒu)區(qū)别。 但(dàn)是(sh♠γ ì)第二種寫法更好(hǎo),因為(wèi)它限制(zhì$∏∑€)了(le)變量的(de)作(zuò)用(yòng)域。
 
2.1 函數(shù)調用(yòng)

Q. 當把數(shù)組當作(zuò)函數(shù)調用(yòng)← ×時(shí)的(de)參數(shù)時(shí),我常常感到(dào)γ ‌&疑惑?

A. 是(shì)的(de)。你(nǐ)需要(←¥yào)牢記傳值參數(shù)(參數(shù)是'♥₽(shì)基本變量類型)和(hé)傳引用(yòng)參數'→♥(shù)(比如(rú)數(shù)組)之間(jiān×♦₹δ)的(de)區(qū)别。

Q. 那(nà)為(wèi)什(shén)麽不(bù)把所有(yǒu)的(de∞₽₹>)參數(shù)都(dōu)使用(yòng)傳值的(de)方式,包括對(duìγ€↑)待數(shù)組?

A. 但(dàn)數(shù)組很(hěn)大(dà)時(shí),複制(₽αzhì)數(shù)組需要(yào)大(dà)量γγ的(de)性能(néng)開(kāi)銷。因為(w$&èi)這(zhè)個(gè)原因,絕大(dà)多(duō)數÷₩§(shù)變成語言支持把數(shù)組傳入函數(s★ hù)但(dàn)不(bù)複制(zhì)一(‌"yī)個(gè)副本——MATLAB語言除外(wài)。
 
2.3 遞歸調用(yòng)

Q. 有(yǒu)沒有(yǒu)隻能(nén↔"δg)用(yòng)循環而不(bù)能(néng)用(↓♥§ yòng)遞歸的(de)情況?

A. 不(bù)可(kě)能(néng),所有(yǒu)的(de☆♠)循環都(dōu)可(kě)以用(yòng)遞歸替代,雖然大(d✘λ∑à)多(duō)數(shù)情況下(xià),遞歸需要(yào±§γ)額外(wài)的(de)內(nèi)存。

Q. 有(yǒu)沒有(yǒu)隻能(néng)用(yòng)遞歸®↓而不(bù)能(néng)用(yòng)循環的(de ↑φ)情況?

A. 不(bù)肯能(néng),所有(yǒu)的 σ(de)遞歸調用(yòng)都(dōu)可(kě)以用(yòng)循環來&©≥(lái)表示。比如(rú)你(nǐ)可(kě)以  用(yòng)while的(de)方式來(lái)實現(xiàn)>'♣棧。

Q. 那(nà)我應該選擇哪個(gè),☆&遞歸的(de)方式 還(hái)是(shì) 循環的(de)方式?

A. 根據代碼的(de)可(kě)讀(dúΩ≈★)性和(hé)效率性之間(jiān)做(zuò₹©∞)權衡。

Q. 我擔心使用(yòng)遞歸代碼時(shí)的♣δ™₹(de)空(kōng)間(jiān)開(kāi)銷和(÷​×hé)重複計(jì)算(suàn)(例如(rú)用(yòng)遞歸解Fibo§​₩nacci)的(de)問(wèn)題。有(yǒuλ§)沒有(yǒu)其他(tā)需要(yào)擔心的(d¥εe)?

A. 在遞歸代碼中創建大(dà)數(shù)據類型(比如(rú•€σ)數(shù)組)時(shí)需要(yào)額外(wài)注意,随著(z↔​he)遞歸的(de)推進,內(nèi)存使用(y® ±òng)将會(huì)迅速增加,由于內(nèi)存使用(yòng)€∞∏→增加,操作(zuò)系統管理(lǐ)內(nèi)存的(de)時£↑π(shí)間(jiān)開(kāi)銷也(yě‌₽)會(huì)增加。
 
4.2 排序與查找

Q. 為(wèi)什(shén)麽我們要(yà∞✘¶o)花(huā)大(dà)篇幅來(lái)證明(m₩‍​íng)一(yī)個(gè)程序是(shì)正☆‍<↑确的(de)?

A. 為(wèi)了(le)防止錯(cuò)誤的(αδ§λde)結果。二分(fēn)查找就(jiù)是(∞≥shì)一(yī)個(gè)例子(zǐ)。現(xiàn)在,你(✔  nǐ)懂(dǒng)得(de)了(le)二分(☆π✘εfēn)查找的(de)原理(lǐ),你(nǐ)就(jiù)能(nén★ g)把遞歸形式的(de)二分(fēn)查找改寫成循環 ±形式的(de)二分(fēn)查找。Knuth 教授在 1946年(n¶↕•ián)就(jiù)發表了(le)二分(fēn£←)查找的(de)論文(wén),但(dàn£γ→)是(shì)第一(yī)個(gè)正确的(de)二分(fēn)查找✔₽的(de)程序在 1962年(nián)δ♠¥ 在出現(xiàn)。

Q. 在JAVA內(nèi)建庫中有(yǒu)沒有(☆λ∑yǒu)排序和(hé)查找的(de)函數(shù)?

A. 有(yǒu)的(de)。在 java.util.Arαφ<≠rays 中包含了(le) Arrays.sort() 和(hé) Ar©§π₹rays.binarySearch() 方法。對(duì)于Compara≥>ble 類型它使用(yòng)了(le) ✘$♠歸并排序,對(duì)于基本數(shù)據類型,它↕ε使用(yòng)了(le)快(kuài)速排序♣σ←™。因為(wèi)基本類型是(shì)值傳遞,快(kuài)速排​§序比歸并排序更快(kuài)而且不(bù)需要(yào)λα額外(wài)的(de)空(kōng)間(jiān)。

Q. 為(wèi)什(shén)麽JAV☆φ♣∞A庫不(bù)用(yòng) 随機(jī)pivot方式的 $(de)快(kuài)速排序?

A. 好(hǎo)問(wèn)題。 因為(wèi)某些(xiē Ω β)程序員(yuán)在調試代碼時(shíΩ∞),可(kě)能(néng)需要(yào)确定性的(de)代碼實現(xià≠& ¥n)。使用(yòng)随機(jī)pivot違背了(le)這(z®♦hè)個(gè)原則。
 
4.3 棧和(hé)隊列

Q. 在Java庫中有(yǒu)對(duì)sta£₩cks 和(hé) queues 的(de)實現(xiàn)嗎(ma↕✔)?

A. Java庫中內(nèi)建 java.util.Sta∞↔ck,但(dàn)是(shì)你(nǐ)應該避免使用(yòng)它如(☆↕<rú)果你(nǐ)需要(yào)一(yī)個(gè)真正的(de)棧♦§Ω±的(de)話(huà)。因為(wèi)它是(shì)實現(xiàn)了( ✔<©le)額外(wài)的(de)功能(néng),比如♠≥(rú)訪問(wèn)第N個(gè)元素。另外(wài),它也(yě)支持從(Ω$‌cóng)棧底部插入元素,所以它看(kàn)上(shàng)去(qù)更↔§像是(shì)一(yī)個(gè)隊列。盡管實現(x÷∑iàn)了(le)這(zhè)些(xiē)額外(wài)的(d®₽e)功能(néng)對(duì)編程人(rén)員(yuán)是(shì)一(λ₹§yī)個(gè)加分(fēn),可(kě)是(shì)∑&<σ我們使用(yòng)數(shù)據結構并不(bù)隻是(shì)想使用(y &←òng)所有(yǒu)功能(néng),而是δ'₹β(shì)需要(yào)我們正好(hǎo)需要(yào)的(de)那(nà$♦≤®)種結構。JAVA對(duì)于棧的(de)實現(xi↑↓àn)就(jiù)是(shì)一(yī)個(gè)典型的(de)寬接口的(d£∞¶¶e)例子(zǐ)。

Q. 我想使用(yòng)數(shù)組來(láiγ‌σ¥)表示一(yī)個(gè)包含泛型的(de)棧,但(dàn)是(shì)§$Ω以下(xià)代碼編譯報(bào)錯(cuò)。為(wèi÷<> )什(shén)麽?
private Item[] a = ne¶Ωw Item[max]; 
oldfirst = first; 
A. 不(bù)錯(cuò)的(de)嘗試。不(bù)幸的(de)是(sh¶♠♥ì),創建一(yī)個(gè)泛型數(shù)組在 Java1.5裡(l±♣♦ǐ)不(bù)支持。你(nǐ)可(kě)以使用(yòng)↓±cast,比如(rú)下(xià)面的(d≈≠£e)寫法:
private Item[] a = (Item[]) ne✘ ✘↑w Object[max]; 
oldfirst = first; 
根本的(de)原因是(shì)JAVA中的↓±(de)數(shù)組是(shì)“協變的×ו(de)(covariant)”,但(dàn)是(shì)泛型并不(bù)‌Ω±是(shì)。比如(rú), String[] 是(shì)♦✔₹π Object[]的(de)一(yī)種子(zǐ)類型,但(dà∞↕≠>n)是(shì) Stack并不(bù)是(shì) Stack 的≠♥(de)一(yī)種子(zǐ)類型。 許多β→£(duō)程序員(yuán)認為(wèi)“協變的(de)”數(shù)>"組是(shì)JAVA在數(shù)據類型方→§↑♣面的(de)一(yī)個(gè)缺點。但(' § dàn)是(shì),如(rú)果我們不$ (bù)考慮泛型,“協變的(de)”數(shù)組是♥♣"(shì)有(yǒu)用(yòng)的(de),比如(rú)實現(xià♣ n) Arrays.sort(Comparable[]) 方法,然後當∏ 參數(shù)是(shì) String[₽♠π]時(shí)它也(yě)可(kě)以被正常調用(<←☆βyòng)。

Q. 可(kě)不(bù)可(kě)以在數(♥¥δshù)組上(shàng)使用(yòng)₩₽ foreach 方式?

A. 可(kě)以的(de)(雖然 數(shù)組©&‌并沒有(yǒu)實現(xiàn) Iterator 接口)。請(qǐ♠φεng)參考下(xià)面的(de)代碼:
public static void main(String[] ≥βargs) {    for ♥≈(String s : args)  ↑​∞♣;     StdOut.→×println(s); } 
Q. 在 linked list 上(shφ&àng)使用(yòng) iterator 是(shìΩπ)不(bù)是(shì)比循環或者遞歸更有(yǒu)效率?

A. 編譯器(qì)在翻譯時(shí),可(↔'♠kě)能(néng)把那(nà)種“尾遞歸”形式翻譯成等價的(de)循環形式→±↑。所以可(kě)能(néng)并沒有(yǒu)可(kě)以™✘ ¥被觀測到(dào)的(de)性能(néng)提升。
尾部遞歸是(shì)一(yī)種編程技(j>®₩ì)巧。如(rú)果在遞歸函數(shù)©↕‌中,遞歸調用(yòng)返回的(de)結果總被直接返回,則稱為(wèi)尾•↑部遞歸。尾遞歸是(shì)極其重要(yào)的(de),&₩π不(bù)用(yòng)尾遞歸,函數(s$→∞hù)的(de)堆棧耗用(yòng)難以估量,需要(yào)保♦♣★♣存很(hěn)多(duō)中間(jiān)函數(s↓α♦hù)的(de)堆棧。比如(rú)f(n, sum)✔β¥  = f(n-1) + value(n) + sum; 會(huì)保存n個(→∞gè)函數(shù)調用(yòng)堆棧,而使用(yòng)尾遞♦©歸f(n, sum) = f(n-1, sum+valu≈±e(n)); 這(zhè)樣則隻保留後一(yī)個(ε☆gè)函數(shù)堆棧即可(kě),之前的(de)可(k≤>≤ě)優化(huà)删去(qù)。
Q. 自(zì)動裝箱機(jī)制(zhì)會(huì)怎麽處理(l​¥ǐ)下(xià)面的(de)情況?
Integer a = null; int b = a;
A. 它将返回一(yī)個(gè)運行(x§↕÷íng)時(shí)錯(cuò)誤。基礎類型不(bù)允許它對(duì)"♦♦應的(de)裝箱類型裡(lǐ)的(de)值是(shì)null。
Q. 為(wèi)什(shén)麽第一(yī)組打印的(de)是Ω≠Ωλ(shì) true,但(dàn)是(shì)∏ 後面兩組打印的(de)是(shì) false?
Integer a1 = 100; Integer ‌↔ a2 = 100; System.out.println(a1 == ←‌‍a2);   // true Integer b1 = ne&δ♥w Integer(100); Integer b2 = new Int≠∑β☆eger(100); System.out.println★"↔(b1 == b2);   // false Integ ©<★er c1 = 150; Integer c2 = 150₩π≠•; System.out.println(c1≤₹α↕ == c2);   // false 
A. 第二組代碼打印 false 是(shì)因為(wèi) b1β✘♥  和(hé) b2 指向不(bù)同的(de) Integer 對(du≠÷ì)象引用(yòng)。第一(yī)組和(hé)第三組依賴于自(zì)‌ &®動裝箱機(jī)制(zhì)。 令人(rén)意外(wài)的(d  ✔e)第一(yī)組打印了(le) true 是(shì)因為(wèi)在 £¶-128 和(hé) 127 之間(jiān)的(d$σ ≥e)值會(huì)自(zì)動轉換成同樣的(de)immutable型"₩π♥的(de)Integer 對(duì)象。對(duì)于超出那(nà)個(gè★•)範圍的(de)數(shù),Java會(huì)對(duì)于每一(yī ↑> )個(gè)數(shù)創建一(yī)個(gè)新的(de)Integer對↑Ω(duì)象。

又爽又黄A片免费观看直播蜜桃,欧美性猛交XXXX乱大交蜜桃,无码人妻精品一区二区蜜桃在线看,国内精品人妻无码久久久影院蜜桃,亚洲精品久久久蜜桃,久久99精品久久久久久水蜜桃,欧美丰满少妇猛烈进入A片蜜桃,蜜桃一区二区三区,WWW.17C嫩嫩草色视频蜜桃