在“破解编码面试”中,有一个问题希望您检查两个字符串是否相互置换。看完代码后,我很困惑为什么作者的示例实现使用第一个字符串的“ 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;
}
答案 0 :(得分:4)
使用char
索引到数组与使用int
索引到数组几乎完全一样。来自the JLS:
数组必须由int值索引; short,byte或char值也可以用作索引值,因为它们经过一元数值提升(第5.6.1节)并成为int值。
因此,当您使用char
索引到数组时,首先将char提升为其对应的int
值,然后将其用于索引到数组中。从用户的角度来看,最终结果是使用char
的行为与使用int
的行为相同。