Java中使用char索引访问数组

3

在网上看到一个Java编程练习的解释时,我发现了下面的代码:

int[] count = new int[128];
int length = 0;
for(char c: s.toCharArray()){
    if(++count[c] == 2){
        length += 2;
        count[c] = 0;
    }
}

我知道这段代码的作用,但是我不知道它如何使用字符索引(例如count[c],其中c是一个字符)来访问数组元素。我以为索引只能是整数?


2
每个字符都是一个整数(或可以隐式且无损地转换为整数),但并非每个整数都是一个字符。 - luk2302
“int i = c; if (++count[i] == 2)” 是正在发生的事情,其中非ASCII字符(§ é € ½ ©)可能会导致IndexOutOfBoundsException异常。 - Joop Eggen
在有用的范围内,new int[Character.MAX_VALUE+1] 可以涵盖所有 UTF-16 代码单元。它可能对 UTF-16 编码为两个代码单元的 Unicode 代码点或 字形簇(也称为“用户感知字符”)不太有用。但是,似乎您只期望 C0 控制字符和基本拉丁字符 - Tom Blodget
3个回答

4
字符被隐式转换为整数。索引仍然是一个整数。

1
一个char(16位)是一个int(32位),反之则不然。这是一个隐式转换,特别是从char到unsigned int。 在这种情况下,索引很可能是表示此char的ASCII代码(对于ASCII字符)。

谢谢!这种情况也会发生在其他类型(例如字符串)吗? - Pepe
不行,因为String不是原始类型。一个字符串可以包含多个字符,并且没有隐式转换。也许你可以把一个整数放在一个字符串中,然后显式地将其转换为int,但这不是一个很好的想法... - Sordinho

0

基本上,每个字符都由ASCII值定义。因此,当您尝试将char用作int时,它将使用其定义的ASCII值。

这就是为什么它能够正常工作的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接