Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当方法参数为byte时,为什么必须将0强制转换为byte?_Java - Fatal编程技术网

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

Java 当方法参数为byte时,为什么必须将0强制转换为byte?,java,Java,当方法参数为byte时,为什么必须将0强制转换为byte 示例: void foo() { bar((byte) 0); } void bar(byte val) {} 我知道如果参数是long类型,我不必强制转换它,所以我猜Java认为数学整数是运行时的整数 它不鼓励使用byte/short吗?因为0是int文本,从int向下转换到byte需要显式转换(因为可能会丢失信息)。您不需要从int到long的显式转换,因为在转换过程中不会丢失任何信息。文本0是一个整数,由于可能会丢失精度,

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

示例:

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

void bar(byte val) {}
我知道如果参数是long类型,我不必强制转换它,所以我猜Java认为数学整数是运行时的整数


它不鼓励使用byte/short吗?

因为
0
int
文本,从
int
向下转换到
byte
需要显式转换(因为可能会丢失信息)。您不需要从
int
long
的显式转换,因为在转换过程中不会丢失任何信息。

文本
0
是一个整数,由于可能会丢失精度,因此不会从整数->字节自动转换。例如,
(字节)1024
超出有效范围。也许编译器可以更智能一些,允许使用小整数文本,但它不

加宽到long是可以的,因为每个整数都可以是long,而不会丢失信息


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

整数文本隐式地是
int
类型,除非它们通过
L
后缀显式标记为
long
short
byte
没有相应的标记

它不鼓励使用byte/short吗


也许是这样,这是理所当然的。使用单个字节或短字符没有任何好处,而且它们经常会导致问题,特别是自引入自动装箱以来。

这里有一个类似的问题,涉及到您的问题:您正在询问差异。
(字节)Integer.MAX\u值的计算结果应该是什么?怎么样
(byte)512
?@Stefan我更想问的是,为什么java不明白0将适合一个字节。我知道整数到字节可能会导致数据丢失。编译器的++1应该更适合于文本。我喜欢你的偶像,独角兽先生。这就是我想要的答案。“也许编译器可以更智能,允许使用小整数文本,但它没有”+1它根本不是编译器——它是(Java)语言规范,Java就是这样指定的。(一个行为不同的Java编译器会违反规范。)另一方面,C会很好地从最小大小的类型开始“加宽文本”,但这同样是根据(C)语言规范。@pst:那么语言规范需要更新。语义。@Stefan Kendall就我而言,整个Java语言都需要重写/重新设计;-)