很多人會有這樣一個體會,java學了好幾遍了,可有時敲代碼時對某些知識點還是不能記憶猶新,模棱兩可。還是得翻書,百度查資料。為了擺脫這個毛病,寫下這篇博文,把易忘的,易錯的知識點,以及重點難點,寫下來,便于參考與記憶。次數多了,就會記在腦海里了。
這個方法真的是困擾了我好幾次了。一直沒明白它到底比較的是什么。今天把它揪出來問問吧。 首先來說下“==”,它是用來比較兩個對象在堆內存的首地址,即用來比較兩個引用變量是否指向同一個對象。當然了,這是對兩個引用類型來說的。如果是8大基礎類型,自然就是兩個值想不想等了。那equals呢?equals()是object類的一個方法。如果子類不重寫equals()方法,那么它和“==”的比較是一樣的。也是比較兩個引用變量是否指向同一個對象。下面舉幾個例子看看。
String s1 = new String( "123"); String s2 = new String( "123"); String s3 ="456"; String s4 ="456"; StringBuffer s5 = new StringBuffer("a"); StringBuffer s6 = new StringBuffer("a"); System.out.PRintln(s1==s2); //false System.out.println(s3==s4); //true System.out.println(s5==s6); //false System.out.println(s1.equals(s2)); //true System.out.println(s3.equals(s4)); //true System.out.println(s5.equals(s6)); //false看了上面的例子是不是有想法:s1.equals(s2)是true, s5.equals(s6)卻又是false,這是為何?因為String類重寫了equals()方法。比較的是兩個字符串的值是不是相等。而StringBuffer沒有重寫。所以結果如此。
//String 類重寫的equals(); public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = count; if (n == anotherString.count) { int i = 0; while (n-- != 0) { if (charAt(i) != anotherString.charAt(i)) return false; i++; } return true; } } return false; }這一比較,心理總算踏實了,再也不會犯錯了。
可能,我又記不起哪些是運行時異常了。整理下吧! 異常Exception(廣義、體系) Throwable 可拋的,是所有異常和錯誤的父類 Error 嚴重的問題,不需要程序去處理 Exception(狹義) 可能需要程序去處理 RuntimeException 運行時異常,它和它的子類都是非受檢異常 1.非受檢異常: 可以不對其進行異常處理,通過嚴謹的編碼邏輯就可以避免的異常如:ArrayIndexOutofBoundsException、NullPointerException、ClassCastException、ArithmeticException… 2.受檢異常:是Exception的子類但不是RuntimeException的子類,都是受檢異常,受檢異常必須要進行異常處理。如:FileNotFoundException、IOException、MalformedURLException、ClassNotFoundException… 3.如何處理異常:try、catch、finally try 嘗試運行可能出現異常的代碼 catch 捕捉某一類型的異常對其進行處理 try{ 代碼1 }catch(異常類型 引用名){ 代碼2 }finally{ 代碼3 } 代碼1是要嘗試運行的可能出現異常的代碼 代碼2是捕捉到某種類型(小括號里的類型)異常要執行的處理邏輯 代碼3是無論任何情況都會被最終執行的代碼,用于收尾工作
今天暫時寫這兩點。以后遇到了,再添加!
新聞熱點
疑難解答