首页 > 解决方案 > 使用“char”和“int”对数组进行索引,有什么区别?

问题描述

在“Cracking the Coding Interview”中有一个问题要你检查两个字符串是否是彼此的排列。查看代码后,我很困惑为什么作者的示例实现使用第一个字符串的“char”值索引一个数组,然后获取第二个字符串的 char 值,但在访问之前将其转换为 int 相同大批。这是下面的代码片段。您可以看到,在第一个 for 循环中,它使用 char 值,但在第二个 for 循环中,它在访问之前将 char 转换为 int。:

    boolean isPermutation(String str1, String str2) {
    if (str1.length() != str2.length()) {
        return false;
    }

    int[] charCount = new int[128];

    char[] s_array = str1.toCharArray();
    for (char c : s_array) {
        charCount[c]++;
    }

    for (int i = 0; i < str2.length(); i++) {
        int c = (int) str2.charAt(i);
        charCount[c]--;
        if (charCount[c] < 0) {
            return false;
        }
    }
    return true;
}

标签: javaarrayscharint

解决方案


使用 a 对数组进行索引与使用 对数组进行索引char几乎完全相同int。从JLS

数组必须由 int 值索引;short、byte 或 char 值也可以用作索引值,因为它们经过一元数字提升(第 5.6.1 节)并成为 int 值。

因此,当您使用 a 对数组进行索引时char,首先将 char 提升为其对应的int值,并用于对数组进行索引。从用户的角度来看,最终结果是使用 achar在功能上与使用int.


推荐阅读