java - 如何比较字符串?

标签 java string comparison

当比较 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/

相关文章:

python - 检查字符串是否在字符串中

java - 我的蓝牙应用随机崩溃并出现错误 : Error receiving broadCast Intent

java - 尝试替换 JTable 中的 boolean 复选框渲染器/编辑器

php - 如何创建一个可以将最后一个单词转换为大写的函数?

php - 为什么 if 不进行比较?

sql - 数据库中的非拉丁字符排序为 "order by"

java - 如何在 LinearLayout 中显示 "visibility="消失的 TextView""

java - 无法在浏览器窗口中查看警报

python - max() 函数如何处理 python 中的字符串列表?

bash - 使用 bash 创建缩进文本