gpt4 book ai didi

java - java中的预自增

转载 作者:行者123 更新时间:2023-11-30 07:12:20 26 4
gpt4 key购买 nike

我有以下代码片段。没问题:

while (++left < to && less(a[left], a[from]));

其中 left 是某个数组索引,less(a, b) 是辅助函数,当且仅当 a <= b; 时返回 true; a - 数组[从 <= 数组索引 < 到]

我特别不明白上面的代码与此的区别:

 while (left < to && less(a[++left], a[from]));

正如我所读到的,预增量在整个表达式之前求值,但事实并非如此(当我第一次使用它时,我得到了越界异常)。有人可以澄清这个问题吗?

附加:代码更少:

private boolean less(T a, T b) {
return a.compareTo(b) <= 0;
}

最佳答案

放置之间的一个差异来自执行 ++left等于 to-1 :这意味着 ++left等于to ,制作<评估为false 。反过来,这会导致忽略对 less(...) 的调用。完全由于&&短路所致,从而防止异常。

当您搬家时++进入a[++left] ,最终又进行了一次迭代,当 left 时抛出越界异常。达到to-1 。预增后,left等于 to ,这超出了数组范围。

关于java - java中的预自增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com