你的位置:首页 > Java教程

[Java教程]“老猿”也会犯的错误


最近在跟着一个项目,在不断测试和完成功能的过程中发现了许多比较低级的错误,这些问题基本上都是靠着断点调试发现的,出问题的代码看了好几遍也没看出问题,我也是醉了…………为了提醒自己以后不要犯同样的错误,总结一下~~~

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);
           }

执行上面的代码,你会发现会报空指针异常,因为a为null,但如果将绿色部分的注释取消,那么这段代码运行过程中是没问题的,因为a为空。