gpt4 book ai didi

java - String.equals 实现

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:45 25 4
gpt4 key购买 nike

在 JDK 8 中,String.equals 实现为

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

为什么迭代使用两个操作 - 递增 i 和递减 n 而不是类似的操作:

while (i < n) {
if (v1[i] != v2[i])
return false;
i++;
}

while (i-- != 0) {
if (v1[i] != v2[i])
return false;
}

用一次递增或递减操作?

我想,它在某种程度上与 JVM 字节码优化有关,但不明白如何。

最佳答案

我认为这是死代码,是从 Strings 仍然共享支持数组并具有 offsetcount 的时代遗留下来的,因此您需要调整索引 a一点点。

String 实现在 JDK 7 Update 6 中发生了变化(许多人对此感到不安,尤其是它发生在次要版本中)。字符串不再共享后备数组(除非字符串本身相等,在这种情况下,新的重复数据删除器会尝试重新共享它们)。

您可以在“how does String.equals() work”中看到对旧实现的讨论。

关于java - String.equals 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33567593/

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