You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中位运算代码逻辑相似为何index值不同?

为什么两次index赋值结果不同?

嘿,这个问题本质是Java表达式的求值顺序和运算符优先级在起作用,咱们拆开来一步步看:

首先先把你的代码格式化一下,方便理清逻辑:

String[] nodes = new String[3];
boolean in;
int index = 0;
int hash = "hi".hashCode(); // "hi"的hashCode是3329

// 第一个赋值场景
in = (nodes[(index = nodes.length - 1) & hash]) != null;
System.out.println(index); // 输出2

// 第二个赋值场景
index = (nodes.length - 1) & hash;
System.out.println(index); // 输出0

第一个场景:数组下标里的赋值+位运算

在表达式 nodes[(index = nodes.length - 1) & hash] 中,Java的求值规则是这样的:

  1. 先执行括号里的 index = nodes.length - 1:把nodes.length-1(也就是2)赋值给index,这个表达式的返回值是赋值后的index值(2)。
  2. 然后拿这个返回值(2)和hash(3329)做位与运算:2 & 3329,结果是0(二进制里2是10,3329的二进制末尾两位是01,位与后是00)。
  3. 最后用这个位与结果(0)作为数组下标访问nodes[0],但index已经被赋值成2了,所以后续打印index得到2。

第二个场景:先位运算再赋值

在表达式 index = (nodes.length - 1) & hash 中:

  1. 先计算括号里的位运算:nodes.length-1(2)和hash(3329)做位与,结果是0。
  2. 然后把这个位运算的结果(0)赋值给index,所以打印index得到0。

简单来说,第一个场景里index = ...是先执行的,赋值完成后才做位运算;第二个场景是先做完位运算,再把结果赋值给index,这就是两次结果不同的核心原因!

内容的提问来源于stack exchange,提问作者ImJustACowLol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:30