当前位置: 代码迷 >> Java相关 >> 针对String类型变量的一些经验
  详细解决方案

针对String类型变量的一些经验

热度:62   发布时间:2016-04-22 19:53:17.0
针对String类型变量的一些心得

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

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为

 

3楼lx_hust
不知道你想表达什么,,需求被你越说越模糊了
2楼初阳暮雪
标题不喜欢,太拉仇恨,吸取经验固然好
Re: skin-free
@初阳暮雪,多谢提醒,是我考虑不周,我这就改……
1楼lx_hust
第一个问题,你之所以(1)和(2)的结果不同,是因为Integer的toString方法是new String(i),所以引用肯定不同,但如果map里面put的一直是String的话,程序员那样写是没有问题的,,,第二个题本质是和String也没有关系,,,问题出在map上,put取值没有的返回null,null类型的调用方法就会报空指针异常
  相关解决方案