java - 数组索引越界未触发

标签 java

public static void insertionSort(int[] data) {
    for (int i =0; i < data.length; i++) {
        int current = data[i];
        int j = i-1;
        while (j >=0 && data[j] >= current) {
            data[j+1] = data[j];
            j--;
        }
        data[j+1] = current;
    }
}

当 data[-1] 第一次出现时, while (j >=0 && data[j] >= current) 行应该抛出数组边界索引。我不明白为什么不。有人可以帮忙吗 谢谢 阿肖克·帕普

最佳答案

如果可以更早满足条件,则永远不会完全评估此类 boolean 表达式。

所以...在你的情况下,因为 j >= 0false 并且 false && ??? 将始终是 false 第二部分不需要评估。这就是为什么data[-1]永远不会被调用。

您可以使用相同的原则进行null检查,例如

if (object != null && object.isSomething())

关于java - 数组索引越界未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34698847/

相关文章:

Java:要 float 的毫秒时间戳字符串

java - 用 Java 编写视频文件

java - 将变量从 Scriptlet 传递到 javascript 代码。

Java 对象转 JSON,使用 javascript 解析

Java JCheckBoxMenuItem 仅在选择时触发事件

java - mapreduce.input.keyvaluelinerecordreader.key.value.separator参数在hadoop安装中的位置

java - 何时不使用双向 SSL 认证验证

java - Tomcat 如何知道我的 IntelliJ webapp war 文件在 Mac 上的位置?

java - Wildfly ejb 独立客户端的 Maven 依赖项条目

java - ActionBarSherlock 和另一个项目对版本 4 的支持存在冲突