当前位置: 首页 > 面试题库 >

Java 为什么切换比没有更快

百里景山
2023-03-14
问题内容

许多Java书籍都将该switch语句描述为比该if else语句快。但是我没有找到任何地方为什么切换比if更快。


我有一种情况,我必须选择两项中的任何一项。我可以使用

switch (item) {
    case BREAD:
        //eat Bread
        break;
    default:
        //leave the restaurant
}

要么

if (item == BREAD) {
    //eat Bread
} else {
    //leave the restaurant
}

考虑item和BREAD是一个恒定的int值。

在上面的示例中,哪个操作更快,为什么?


问题答案:

因为有很多情况下,有一些特殊的字节码可以有效地评估switch语句。

如果使用IF语句实现,则将进行检查,跳转到下一个子句,进行检查,跳转到下一个子句等。通过切换,JVM加载要比较的值,并遍历值表以查找匹配项,这在大多数情况下更快。



 类似资料:
  • 我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误

  • 问题内容: 为什么执行速度比切片慢? 令人惊讶的是,即使包括长度计算在内,切片仍然明显更快: 注意:此行为的第一部分已在 Python的数据分析 (第3章)中进行了说明,但未提供任何解释。 。 如果有帮助:这是;的C代码。这是输出: 问题答案: __可以通过考虑操作员完成工作所需的时间来解释 某些 性能差异: 差的另一部分可以通过以下事实来解释是一个 函数 ,和甚至无操作函数调用需要一点时间: 这

  • 问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本

  • 问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解

  • 问题内容: 我正在探索,惊讶地发现那没有。 我有两个问题。 主要问题 我想知道为什么删除了? 是否存在性能问题或其他问题? 次要问题 我解决我的问题写我的: 这样可以/有更好的方法吗? 问题答案:

  • 我想尝试java SE 9(Module System Quick-Start Guide)http://openjdk.java.net/projects/jigsaw/Quick-Start提供的一些特性,当我尝试下载java SE 9 jdk时,我得到这样的语句:“java SE 9已经达到支持的尽头。java SE 9的用户应该切换到java SE 10”为什么会这样,我应该远离java