在 Java 中的整数数组中哪个操作交换或比较更昂贵

Which is more expensive operation swap or comparison in integer array in Java

Java 中整数数组中的交换操作和比较操作哪个更昂贵?或者他们都可以被认为是一样的?

上下文:对几乎排序的数组进行排序(我不是在谈论 k 排序的数组,其中每个元素从正确的位置最多偏移 k 个)。即使我们使用插入排序,最后的比较次数也将与任何数组或最坏情况下的比较次数相同。不是吗?只是互换会更少。如果我错了请更正。

Swap 应该更贵,因为它包括:

  1. 正在从内存中读取数据到缓存
  2. 正在从缓存读取数据到寄存器
  3. 正在将数据写回缓存

比较应该更便宜,因为它包括:

  1. 正在从内存中读取数据到缓存
  2. 正在从缓存读取数据到寄存器
  3. 在两个寄存器上执行单个比较操作(这应该比将两个整数写入缓存快一点)

但现代处理器非常复杂且彼此不同,因此获得正确答案的最佳方法是对代码进行基准测试。