在Java中整数到字节转换

xyz*_*xyz 5 java

在Java中我们可以做到

byte b = 5;    
Run Code Online (Sandbox Code Playgroud)

但为什么我们不能将相同的参数传递给接受的函数 byte

myObject.testByte(5);
public void testByte (byte b)
{
  System.out.println("Its byte");
}     
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误

The method testByte(byte) in the type Apple is not applicable for the arguments (int)
Run Code Online (Sandbox Code Playgroud)

PS:可能是一个愚蠢的问题,我想我需要再次修改我的基础知识.

谢谢.

Amb*_*ber 6

硬编码的初始化值在Java中有些特殊 - 它们被假定为对您正在初始化的变量类型的强制.从本质上讲,第一部分代码实际上看起来像这样:

byte b = (byte) 5;
Run Code Online (Sandbox Code Playgroud)

如果你这样做......

myObject.testByte((byte) 5);
Run Code Online (Sandbox Code Playgroud)

...你不会得到那个错误,但如果你不这样做,那么5默认情况下创建它int,而不是自动强制.

  • 大多数方便 - 规范设计者不希望为字节文字创建不同的格式而不是用于初始化事物的数字文字,并且因为变量的类型是声明的一部分,所以很明显你放的是什么样的盒子它进入 - "byte b = 5"非常清楚`5`将被放入`byte`.另一方面,函数调用并不是那么明确 - 例如,如果你的方法只是命名为`testFoo`会怎么样?`testFoo(5)`与`testFoo(1024)`看起来没什么不同,但后者实际上不能正常工作. (2认同)

Boh*_*ian 6

原因是当你缩小基元时,你必须明确地进行转换 - 所以你承认可能会丢失数据.

为了说明,在进行转换时5没有丢失,因为该值在-128...127字节值范围内,但是考虑一个更大的int值,比如说300- 如果转换为byte,则必须丢弃一些位以使其适合8位.

这个主题在这里完整介绍.