gpt4 book ai didi

java - 如何比较字符串?

转载 作者:行者123 更新时间:2023-12-02 01:55:45 25 4
gpt4 key购买 nike

当比较 2 个字符串时,实际上会发生什么?我们如何确定字符串A中的内容等于字符串B?我们是否在 unicode 字符表中查找两个字符串的元素之间的比较?如果是,那么 equals() 如何知道像“ABC”这样的字符串中的元素,equal() 如何将 A 与 BC 分开以将其与其他字符串的第一个元素进行比较?

最佳答案

字符串基本上是 char[] 的不可变包装器,具有许多有用的实用方法。

因此,要检查两个字符串是否相等,您只需检查它们是否都有相同大小和内容的 char 数组。

使用Arrays类,它具有处理数组的有用方法,简化的 String 实现可能如下所示:

public final class String {
private char[] value;

public String(char[] value) {
this.value = value.clone();
}

@Override
public boolean equals(Object obj) {
if (! (obj instanceof String))
return false;
String other = (String) obj;
return Arrays.equals(this.value, other.value);
}

@Override
public int hashCode() {
return Arrays.hashCode(this.value);
}

public char[] toCharArray() {
return this.value.clone();
}

public String substring(int beginIndex, int endIndex) {
return new String(Arrays.copyOfRange(this.value, beginIndex, endIndex));
}

// more utility methods

}

真正的String类更复杂,具体取决于Java版本。

例如在早期版本中,char[] 可以由多个 String 对象共享,因此例如substring() 不需要复制数组。

在更高版本中,优化已更改为在可能的情况下将字符存储在 byte ( LATIN1 ) 数组中,而不是 char ( UTF-16 ) 数组,以节省空间。

这些不同的优化当然会使 String 实用方法的内部代码变得复杂,这可能是您在查看 JDK 源代码时感到困惑的地方。

关于java - 如何比较字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322493/

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