切换案例顺序会影响速度吗? [英] Does switch case order affect speed?

查看:83
本文介绍了切换案例顺序会影响速度吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图谷歌这个,但没有运气。

I've tried to google this, but had no luck.

我有一个非常大的开关,有些情况显然更常见比其他人。

I have a very big switch, and some cases are obviously more common than others.

所以我想知道订单是否真的保持原样并且上部案例在较低之前进行测试,因此被评估得更快。

So I would like to know if the order is really held as it is and the "upper" cases get tested before the "lower", therefore being evaluated faster.

我想保留我的订单,但如果它损害了速度,那么重新排序分支将是一个好主意。

I'd like to keep my order, but if it hurts speed, then reordering the branches would be a good idea.

例如:

switch (mark) {
        case Ion.NULL:
            return null;

        case Ion.BOOLEAN:
            return readBoolean();

        case Ion.BYTE:
            return readByte();

        case Ion.CHAR:
            return readChar();

        case Ion.SHORT:
            return readShort();

        case Ion.INT:
            return readInt();

        case Ion.LONG:
            return readLong();

        case Ion.FLOAT:
            return readFloat();

        case Ion.DOUBLE:
            return readDouble();

        case Ion.STRING:
            return readString();

        case Ion.BOOLEAN_ARRAY:
            return readBooleans();

        case Ion.BYTE_ARRAY:
            return readBytes();

        case Ion.CHAR_ARRAY:
            return readChars();

        case Ion.SHORT_ARRAY:
            return readShorts();

        case Ion.INT_ARRAY:
            return readInts();

        case Ion.LONG_ARRAY:
            return readLongs();

        case Ion.FLOAT_ARRAY:
            return readFloats();

        case Ion.DOUBLE_ARRAY:
            return readDoubles();

        case Ion.STRING_ARRAY:
            return readStrings();

        default:
            throw new CorruptedDataException("Invalid mark: " + mark);
    }


推荐答案

重新排序开关语句不会有没有任何影响。

Reordering a switch statement does not have any effect.

查看Java字节码规范,可以将开关编译为 lookupswitch tableswitch 指令,打开 int lookupswitch 始终使用排序顺序中的可能值进行编译,因此重新排序代码中的常量将永远不会重要,并且 tableswitch 只有一个相对于指定偏移量的可能跳转数组,所以它也不关心原始顺序。

Looking at the Java bytecode spec, a switch can either be compiled to a lookupswitch or a tableswitch instruction, switching on an int. A lookupswitch is always compiled with the possible values in sorted order, so reordering the constants in the code will never matter, and a tableswitch just has an array of the possible jumps relative to a specified offset, so it, too, never cares about the original order.

参见 http://docs.oracle.com/javase/ specs / jvms / se7 / html / jvms-6.html #jvms-6.5.lookupswitch http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.tableswitch 了解详情。

这篇关于切换案例顺序会影响速度吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆