java中的陷阱 你注意了嗎?

來源:互聯網
上載者:User

看了一段北風網的視頻,總結幾個經典的java陷阱給大家。

答案隱藏了,Ctrl+A顯示。建議先思考一下結果,然後運行代碼實驗。也許你會恍然大悟。

1、找奇數:

public static boolean isOdd(int i){<br /> return i % 2 == 1;<br />} 

上面的方法真的能找到所有的奇數嗎?

A:沒有考慮到負數問題,如果傳參是負數,那麼永遠不能得到結果!應該是:return i % 2 != 0;

2、浮點數想減

System.out.println(2.0-1.9);

上面會列印0.1嗎?

A:不會,自己實驗就知道結果了。正確做法:用decimal。

3、交換

int x = 2010;<br />int y = 2012;<br />x^=y^=x^=y;<br />System.out.println("x= " + x + "; y= " + y);

x、y的值呼喚了嗎?

A:沒有,java運算順序是從左至右的,應該這麼寫:y=(x^= (y^= x))^ y;

4、字元和字串

System.out.println("H" + "a");<br />System.out.println('H' + 'a');

上面兩個語句輸出結果相同嗎?

A:不想同,字元會被轉換成在數字。所以第一句輸出:Ha,第二句輸出兩個字元的assii碼相加的數字。

5、無限迴圈

public static final int END = Integer.MAX_VALUE;<br />public static final int START = END - 100;<br />public static void main(String[] args) {<br />int count = 0;<br />for (int i = START; i <= END; i++)<br />count++;<br />System.out.println(count);<br />}

上面程式啟動並執行結果是什嗎?

A:無限迴圈。將i<=END改成i<END?為什麼呢?你知道的,呵呵!

6、計數器問題

int minutes = 0;<br />for (int ms = 0; ms < 60*60*1000; ms++)<br />if (ms % 60*1000 == 0)<br /> minutes++;<br />System.out.println(minutes);

結果跟你想的一樣嗎?

A:呵呵,括弧問題,不多說!

7、到底返回什嗎?

public static boolean decision() {<br /> try {<br /> return true;<br />} finally {<br /> return false;<br />}<br />}  

true?false?

A:一般情況下,不管怎麼說try/catch代碼塊中,finally總是最後被執行的 。

8、錯誤裡聚集遍曆

public static void main(String[] args) {<br /> Vector v = new Vector();<br /> v.add("one");<br /> v.add("two");<br /> v.add("three");<br /> v.add("four");<br /> Enumeration enume = v.elements();<br /> while (enume.hasMoreElements()){<br /> String s = (String) enume.nextElement();<br /> if (s.equals("two"))<br /> v.remove("two");<br /> else{<br /> System.out.println(s);<br /> }<br /> }<br /> System.out.println("What's really there...");<br /> enume = v.elements();<br /> while (enume.hasMoreElements()){<br /> String s = (String) enume.nextElement();<br /> System.out.println(s);<br /> }<br />}

運行代碼看看結果跟你想的一樣嗎?

A:一般不建議在遍曆聚集的時候對聚集進行操作。為什麼結果是這樣呢?看JDK源碼能得到答案。Enumeration沒有實現Fail Fast操作,如果換成ArrayList,上面的代碼可能會出錯。《java與模式》迭代子(iterator)介紹了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.