2011-11-17 45 views
3

最近我看到很多similiar代码块中的一个项目,该项目被写入方式如下:现在不明显数组索引

String usedAlphabet = "x3w4tnu34urgbgierg"; 

byte c = // (something initialized earlier) 

return usedAlphabet[(int)(c/16)]; 

,什么可能是使用(int)投在访问相应的数组的原因?

对我来说,这似乎是多余的,但我可能是错的,或者我可能缺乏关于类型转换机制的知识。

回答

1

正如您已经发现的,演员阵容是冗余。它是否有助于可读性?也许,取决于上下文。 真的可以做什么有助于这种“不明显的数组索引”的可读性?好的名字我告诉你(当然,作者应该找到正确的名字,表达他的意图,我刚刚把它们放在这里):

int sectionSize = 16; 

String usedAlphabet = "x3w4tnu34urgbgierg"; 
byte sectionIndex = // (something initialized earlier) 

int alphabetIndex = sectionIndex/sectionSize; 
return usedAlphabet[alphabetIndex]; // not so puzzling anymore 
6

你是对的;这里是多余的。有时候冗余演员可以使读者对使用更加明显,但这取决于上下文。

5

你是对的 - 除法是整数除法,它总是会产生一个整数,所以不需要强制转换。

然而,c本身缺乏上下文(特别是如果它没有被定义接近这种用法),因为它可能并不明显,这是一个byte/int。有可能是演员被添加为可读性援助。

2

c由于是byte16int,除法的结果是一个int,使得铸造的冗余。然而,有可能在某一时刻c的声明有点像longdouble,并且需要投射。当声明改变时,演员从未被删除。

1

我猜想来自一位开发者的演员,他对语言的打字规则不清楚,因此采用了“安全性更高而不是抱歉”的方法。我怀疑大多数人在某个时候已经这样做了。这就是说 - 演员是不需要的,甚至没有澄清。