最近我看到很多similiar代码块中的一个项目,该项目被写入方式如下:现在不明显数组索引
String usedAlphabet = "x3w4tnu34urgbgierg";
byte c = // (something initialized earlier)
return usedAlphabet[(int)(c/16)];
,什么可能是使用(int)
投在访问相应的数组的原因?
对我来说,这似乎是多余的,但我可能是错的,或者我可能缺乏关于类型转换机制的知识。
最近我看到很多similiar代码块中的一个项目,该项目被写入方式如下:现在不明显数组索引
String usedAlphabet = "x3w4tnu34urgbgierg";
byte c = // (something initialized earlier)
return usedAlphabet[(int)(c/16)];
,什么可能是使用(int)
投在访问相应的数组的原因?
对我来说,这似乎是多余的,但我可能是错的,或者我可能缺乏关于类型转换机制的知识。
正如您已经发现的,演员阵容是冗余。它是否有助于可读性?也许,取决于上下文。 真的可以做什么有助于这种“不明显的数组索引”的可读性?好的名字我告诉你(当然,作者应该找到正确的名字,表达他的意图,我刚刚把它们放在这里):
int sectionSize = 16;
String usedAlphabet = "x3w4tnu34urgbgierg";
byte sectionIndex = // (something initialized earlier)
int alphabetIndex = sectionIndex/sectionSize;
return usedAlphabet[alphabetIndex]; // not so puzzling anymore
你是对的;这里是多余的。有时候冗余演员可以使读者对使用更加明显,但这取决于上下文。
你是对的 - 除法是整数除法,它总是会产生一个整数,所以不需要强制转换。
然而,c
本身缺乏上下文(特别是如果它没有被定义接近这种用法),因为它可能并不明显,这是一个byte/int
。有可能是演员被添加为可读性援助。
c
由于是byte
和16
为int
,除法的结果是一个int
,使得铸造的冗余。然而,有可能在某一时刻c
的声明有点像long
或double
,并且需要投射。当声明改变时,演员从未被删除。
我猜想来自一位开发者的演员,他对语言的打字规则不清楚,因此采用了“安全性更高而不是抱歉”的方法。我怀疑大多数人在某个时候已经这样做了。这就是说 - 演员是不需要的,甚至没有澄清。