• Java判断字符串变量是否为空

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • 问题描述

    语义基因抽取的recognize_domainWord方法中,判断disciplineId是否为空时,如果采用简单的disciplineId==""进行判断,有时候会判断不准确。导致后面的Long.parseLong(disciplineId)报数字转换格式异常。

    代码如下:

            //根据disciplineId查找其孩子结点学科id
            if(disciplineId!=""&&disciplineId!=null){
                if(isNumeric(disciplineId)){
                    CourseType ct=CourseTypeService.getInstance().getById(Long.parseLong(disciplineId));
                    String childDisciplineIds=ct.getChildrenIdStr();
                    querydisciplineIds=disciplineId+","+childDisciplineIds;
                }
            }

    • 问题原因

    要理解采用“==”进行判断有时正确,有时错误的原因,需要清楚两个方面的内容:

    1、“==”。java中的“==”比较的是引用是否相等,而不是引用所指的对象的值是否相等;

    2、对于字符串的创建方式:String str = "aa";和String str = new String("aa");在本质上有区别。前者是将“aa”放到字符串连接池中存储的,如果再次声明String str2 = "aa",str2和str引用的都是“aa”;而后者和创建普通的类对象一样,即使再次声明String str2 = new String("aa"),会在内存中在创建一个存储aa的区域,这是str和str2指向不同的内存地址。

    基于以上两点,disciplineId的创建方式,会影响使用==的比较结果。例如下面的程序:

    结果:

    s1==s2:true
    s1==s3:false
     
    要深入理解这方方面的内容可以查看:
    • 解决方法:使用java自带的equals方法进行判断

            //根据disciplineId查找其孩子结点学科id
            if(disciplineId!=null&&!disciplineId.equals("")){
                if(isNumeric(disciplineId)){
                    CourseType ct=CourseTypeService.getInstance().getById(Long.parseLong(disciplineId));
                    String childDisciplineIds=ct.getChildrenIdStr();
                    querydisciplineIds=disciplineId+","+childDisciplineIds;
                }
            }

    • 标签:
    • aa
    • 进行
    • 判断
    • string
    • disciplineid
    • childdisciplineids
    • str
    • java
    • 创建
    • str2
    • 引用
    • 变量
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部