当方法参数为byte
时,为什么必须将0转换为byte
?
示例:
void foo() {
bar((byte) 0);
}
void bar(byte val) {}
我知道如果参数类型为long我不必抛出它,所以我猜测Java认为数学整数是整数运行时。
是否不鼓励使用byte / short?
答案 0 :(得分:8)
因为0
是int
字面值,而byte
的{{1}}缩写需要明确的演员(因为可能会丢失信息)。不需要从int
到int
的明确演员,因为在该转换中不会丢失任何信息。
答案 1 :(得分:7)
文字0
是一个整数,并且没有来自整数的自动转换 - >字节,由于潜在的精度损失。例如,(byte)1024
超出有效范围。也许编译器可能更聪明,并允许这个小整数文字,但它不...
扩展到long是可以的,因为每个整数都可以很长而不会丢失信息。
是的,出于这个原因,我几乎不会在我的代码公开的任何API中使用short或byte(尽管它可以用于中间计算)
答案 2 :(得分:2)
整数文字隐式为int
类型,除非它们通过long
后缀明确标记为L
。 short
或byte
没有相应的标记。
是否不鼓励使用byte / short?
也许它确实如此,理所当然。使用单个字节或短路没有任何优势,它们经常会引起问题,特别是自引入自动装箱以来。