当方法参数为字节时,为什么必须将0转换为字节?

时间:2011-09-06 18:21:15

标签: java

当方法参数为byte时,为什么必须将0转换为byte

示例:

void foo() {
   bar((byte) 0);
}

void bar(byte val) {}

我知道如果参数类型为long我不必抛出它,所以我猜测Java认为数学整数是整数运行时。

是否不鼓励使用byte / short?

3 个答案:

答案 0 :(得分:8)

因为0int字面值,而byte的{​​{1}}缩写需要明确的演员(因为可能会丢失信息)。不需要从intint的明确演员,因为在该转换中不会丢失任何信息。

答案 1 :(得分:7)

文字0是一个整数,并且没有来自整数的自动转换 - >字节,由于潜在的精度损失。例如,(byte)1024超出有效范围。也许编译器可能更聪明,并允许这个小整数文字,但它不...

扩展到long是可以的,因为每个整数都可以很长而不会丢失信息。

是的,出于这个原因,我几乎不会在我的代码公开的任何API中使用short或byte(尽管它可以用于中间计算)

答案 2 :(得分:2)

整数文字隐式为int类型,除非它们通过long后缀明确标记为Lshortbyte没有相应的标记。

  

是否不鼓励使用byte / short?

也许它确实如此,理所当然。使用单个字节或短路没有任何优势,它们经常会引起问题,特别是自引入自动装箱以来。