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

Rob*_*Fox 3 java

为什么我必须byte在方法参数为0 时转换0 byte

例:

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

void bar(byte val) {}
Run Code Online (Sandbox Code Playgroud)

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

它不会阻止使用byte/short吗?

dle*_*lev 8

因为0int文字,和下铸造byteint,需要有明确的转换(因为信息丢失的可能性.)你并不需要从一个明确铸造intlong,因为没有信息可以在转换中丢失.


Ste*_*ker 7

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

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

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

  • 编译器的++ 1应该更智能的文字.我喜欢你的偶像,先生独角兽. (3认同)
  • @Stefan Kendall就我而言,整个Java语言需要重写/重新设计;-) (2认同)