最近在跟著一個項目,在不斷測試和完成功能的過程中發(fā)現了許多比較低級的錯誤,這些問題基本上都是靠著斷點調試發(fā)現的,出問題的代碼看了好幾遍也沒看出問題,我也是醉了…………為了提醒自己以后不要犯同樣的錯誤,總結一下~~~
1、在java中判斷兩個String類型的數據是否相等時,我往往用equals方法,而不是用“==”,因為“==”是判斷兩個String的引用是否相同,而equals方法則是判斷他們的值是否相等。而第一個問題就出現在這里,項目中的一個操作一直沒有得到我想要的結果,問題就出再一個if判斷條件,之前的程序員使用了“==”,使得這個if條件一直不成立;
Map b = new HashMap(); (1) b.put("key", "1");
(2) b.put("key", 1); String a = b.get("key").toString(); if("1" == a){ System.out.PRintln(123456); }else{ System.out.println(654321); }
上面的代碼,(1)和(2)的結果是完全不同的。
2、在判斷一個String的變量是否為空的操作中,由于變量a是從Map類型的b中獲取的,因此需要判斷一下是否為空。在jdk1.7版本中出現了一種方法“a.isEmpty()”,項目中也用到了這個方法,但在實際過程中這個地方一直在報空指針的異常,因為在項目中a是null而不是空,因此會報空指針異常。所以在使用這個方法的時候,先要對變量進行是否為null的判斷。示例代碼如下:
Map b = new HashMap(); /*b.put("key", "");*/ String a = (String)b.get("key"); if(a.isEmpty()){ System.out.println(123456); }else{ System.out.println(654321); }
執(zhí)行上面的代碼,你會發(fā)現會報空指針異常,因為a為null,但如果將綠色部分的注釋取消,那么這段代碼運行過程中是沒問題的,因為a為空。
新聞熱點
疑難解答