如果条件执行,即使它是假的?

时间:2012-02-22 18:21:06

标签: grails groovy

def findFdrsWithMaturityYear(year){
       def fdrs = Fdr.findAll()
       def foundFdrs = new ArrayList<Fdr>()
        def foundYear
        fdrs.each {
            foundYear = DateUtils.getYearFromDate(it.maturityDate)
            if (year.toString() == foundYear.toString()){ // line 7
                foundFdrs.add(it)  // line 8
            }
        }
        return foundFdrs
    }

上面是groovy代码。我用intellijidea 11调试它,当我到达第7行时,我发现即使条件为假,它也会进入第8行,但是findFdrs列表不会增长,因为它在列表中添加了一个元素。我在grails web应用程序中使用此代码,每次运行此Web应用程序时,即使第7行的条件为真,我也会得到空的foundFdr列表。我还通过创建grails集成测试测试了上面的代码,测试成功通过,即我得到了带有一些元素的foundFdrs列表,但是在我的grails应用程序中没有,问题出在哪里?

3 个答案:

答案 0 :(得分:1)

我怀疑尽管调试器显示该行正在执行,但它实际上并未执行

不确定为什么要在两个变量上执行toString ...

答案 1 :(得分:-3)

我认为问题在于“if”条件。你有year.toString()== foundYear.toString()本质上是说“if(string == string)”,但是==运算符可能没有重载来比较Groovy中的字符串(我真的不知道Groovy,但我用Java和Scala编程)。查看Groovy文档,看看是否有任何“equals”方法进行字符串比较,因为我非常怀疑==运算符会执行您想要的操作。希望这有点帮助!

由于Groovy是一种类似Java的语言,您可能需要检查一下= http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

答案 2 :(得分:-3)

安全选项是使用StringUtils#equals

因为使用“==”

可能会或可能不会比较两个字符串