微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

groovy’witch’与’if’表现

我知道在 Java中,当你遇到很少的情况时,不应该使用switch语句,在这种情况下,最好使用if else if.

对于groovy来说也是如此吗?

哪个在这两个代码之间更高效?

myBeans.each{
    switch it.name
    case 'aValue':
        //some operation
    case 'anotherValue:
        //other operations
}

要么:

myBeans.each{
    if(it.name == 'aValue'){
        //some operation
    }
    else if (it.name =='anotherValue){
        //other operations
    }
}

解决方法

在Java中,“switch”比串行if块更有效,因为编译器生成一条 tableswitch指令,其中目标可以从跳转表中确定.

在Groovy中,switch不限于整数值,并且具有许多额外的语义,因此编译器不能使用该工具.编译器生成一系列比较,就像它对serial if块一样.

但是,每次比较都会调用ScriptBytecodeAdapter.isCase(switchValue,caseExpression).这始终是对caseExpression对象上的isCase方法的动态方法调用.该调用可能比ScriptBytecodeAdapter.compareEqual(左,右)更昂贵,后者被称为if比较.

因此在Groovy中,如果是块,则交换机通常比串行更昂贵.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐