Java(字节)文字转换是否有效?
好的,在Java6中没有y文字后缀。考虑这个代码:Java(字节)文字转换是否有效?,java,casting,byte,literals,Java,Casting,Byte,Literals,好的,在Java6中没有y文字后缀。考虑这个代码: byte b = some_byte(); switch (b) { case (byte) 0x80: ... case (byte) 0x81: ... 而这个替代方案: int b = some_byte() & 0xff; switch (b) { case 0x80: ... case 0x81: ... 你会用哪一种?在第一种情况下,是在运行时还是编译时执行(字节)强制转换?谢谢 你会用哪
byte b = some_byte();
switch (b) {
case (byte) 0x80: ...
case (byte) 0x81: ...
而这个替代方案:
int b = some_byte() & 0xff;
switch (b) {
case 0x80: ...
case 0x81: ...
你会用哪一种?在第一种情况下,是在运行时还是编译时执行(字节)强制转换?谢谢
你会用哪一种
可能是后一种,只是为了简单起见——但要有一个注释来解释发生了什么
在第一种情况下,是在运行时还是编译时执行(字节)强制转换
编译时。不要忘记,无论如何,case值都必须是编译时常量
另一个选项是为以下内容创建常量:
私有静态最终字节FOO=(字节)0x80;
专用静态最终字节栏=(字节)0x81
除此之外,这使得这些价值观不再那么“神奇”
或者您甚至可以在第二种情况下使用枚举…
some_byte() & 0xff;
添加2条说明。其余的都一样。你可以跟我核对一下
javap -c Test
其中Test是测试类的名称。为什么您认为这段代码对应用程序的性能影响最大?@mellamokb好吧,如果您多次这样做,一切都会被认为是重要的,值得优化。特别是如果这个变化很简单,而且仍然可以阅读……@brimborium:我完全同意。然而,我的观点是,这个应用程序是经过分析的,还是OP只是猜测?如果你真的不知道有什么问题,那么尝试随机地让代码块变得更有效率并牺牲可读性是绝对不明智的。只是猜测。。。实际上,从一开始就在努力学习正确的思维。感谢您的评论。+1鉴于switch只支持字节码中数字的
int
类型,我怀疑是否存在性能差异。感谢您的反编译器提示(太懒了,无法使用它…)
javap -c Test