Java 中的 Switch 语句
2022-09-03 04:40:17
在 Java 中,switch 语句可能有多少种情况?例如,如果我们检查一个整数,有多少个大小写块是可能的?
在 Java 中,switch 语句可能有多少种情况?例如,如果我们检查一个整数,有多少个大小写块是可能的?
您最有可能首先遇到的绑定是每个类的常量池中的最大条目数,即 65535。这将允许几千个复杂度很小的案例块。常量池包含类中至少使用一次的每个数字或字符串文本的一个条目,但也包含所有字段、方法和/或类引用的一个或多个条目,因为这些条目代表常量池中也必须存在的其他常量组成。即,方法引用条目由对用于方法签名的字符串条目的引用和对声明类的类条目的引用组成。类条目本身再次引用类名的字符串条目。
请参见: Java 虚拟机的限制和 Java 虚拟机规范中的常量池
在 case 块中忽略或重用代码的开关的绝对上限略小于 2^30 个,因为每个案例都有一个跳转目标,该目标为有符号的 32 位整数(参见 tableswitch 和 lookupswitch 指令),因此每个案例需要 4 个字节,并且每个方法的字节代码大小限制为略小于 2^32 字节。这是因为字节代码被包装在 code 属性中,并且属性的长度以无符号 32 位整数的形式给出。这个大小会减少,因为 code 属性有一些标头信息,该方法需要一些进入和退出代码,而 tableswitch 语句需要一些字节,其最小值/最大值和最多 3 个字节的填充。
没有限制,除了JVM的大小以适应所有字节码