字符串相等比较

记一个字符串比较的小坑!!

 

在Java中,我们用equals()来比较两个字符串的内容是否相等。

equals()方法是继承于顶级类Object的,然后又在String类中被覆写,专门用来比较两个字符串的内容是否相同!

典型用法为:str1.equals(str2)    输出为true,则表示str1,str2两个字符串内容相等;反之,则为不相等!

我的代码使用情况是这样的:从sqlite数据库取出数据,因为数据中有一个字段是FileName,我需要判断有哪些记录的FileName是一样的,然后把一样的记录抓在一起,然后再去使用。于是我先用了ORDERBY子句对数据输出进行排序,然后定义了一个FileNameTemp来做临时变量,用于存储当前记录中的FileName,并且判断它跟上一条记录的FileName是否一样。

核心代码如下:

String fileNameTemp=null;

while (rs.next()){

    //取出当前记录的fileName

String  fileName=rs.getString(1);   

//判断字符串内容是否相等

if( ! fileNameTemp.equals(fileName)){

fileNameTemp=fileName;

//下面的具体操作省略

.............
}else{

//下面具体操作省略

..................
}

}

运行的结果是:第一条记录判断的时候,本该进入的if操作没有进入,反而进入了else代码块中。

进入debug调试,发现fileName是有值的,说明数据库没问题,发现第一次判断时,fileNameTemp是null。照理来讲

! fileName.equals(fileNameTemp)应该返回true,然后进入if 代码块的。事实是,他先进入了else代码块。

经过思考,发现问题出现在第一次时,fileNameTemp=null; null表示空,这让equals()判断出错!!!最后将if里面的判断换为

if( ! fileName.equals(fileNameTemp))  调换了两个字符串的位置,问题得以解决!

总结:在使用equals()判断两个字符串内容相等时,一般情况下,str1.equals(str2)和str2.equals(str1)效果是一样的,但是如果某个字符串可能为null,则把这个字符串位置放在equals()的参数位置!如果两个字符串都有可能为null时,最好在一开始的时候进行判断,例如if(str == null)

 

 

 

 

你可能感兴趣的:(Java)