java - 使用“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;
}
解决方案
使用 a 对数组进行索引与使用 对数组进行索引char
几乎完全相同int
。从JLS:
数组必须由 int 值索引;short、byte 或 char 值也可以用作索引值,因为它们经过一元数字提升(第 5.6.1 节)并成为 int 值。
因此,当您使用 a 对数组进行索引时char
,首先将 char 提升为其对应的int
值,并用于对数组进行索引。从用户的角度来看,最终结果是使用 achar
在功能上与使用int
.
推荐阅读
- javascript - 在Javascript中为未定义和未定义类型赋值
- java - 如何在eclipse中的javafx中制作视频播放器
- java - 错误:类数据库中的方法 cleanCart 不能应用于给定类型
- flutter - Flutter中ListTile标题属性的默认字体大小?
- android - 如何在 Firebase 回收器适配器中实现 recyclerview ItemClickListener()?
- javascript - 如何在 Angular 中访问 Json 中的嵌套键值对
- c++ - 使用基地址和偏移量获取变量的地址
- python - (Python) Monkeypatch __new__ 用于 python 中的 int、float、str、list、dict、set 和 module 类型的对象
- android - adb 服务器版本 (41) 与此客户端 (39) 不匹配
- python-3.x - 使用混合 cnn+svm 模型的图像识别