- 
							
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:trues1==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条)
聪明如你,不妨在这 发表你的看法与心得 ~