在下面的代码中,对整数值9进行隐式类型转换,并将其分配给大小为8位的byte数据类型的变量。
class Demo1
{
public static void main(String args[])
{
byte b=9;
System.out.println(b);
}
}
代码愉快地编译和执行。
但是当我编写以下代码时,它给了我编译错误
class Demo2
{
void func1(byte b)
{
System.out.println(b);
}
public static void main(String[] args)
{
Demo2 d1=new Demo2();
d1.func1(9);
}
}
请解释一下为什么后一个代码中没有发生隐式(自动类型转换)?
感谢所有人的期待。
答案 0 :(得分:3)
因为byte
(8位)可以保存的信息少于int
(32位),所以编译器不会自动将int
强制转换为byte
,因为您可能丢失过程中的信息。例如:
int a = 150;
byte b = (byte) a;
System.out.println(b);
这将打印-106
因为150
超出字节范围(-128 - 127)。
编译器需要您手动将int
投射到byte
,以确保这不是错误,并且您了解演员的含义。
答案 1 :(得分:1)
您需要更改下面的代码,以免丢失精度错误。
这将使编译器明白你知道你将失去精确度。
void func1(int i)
{
byte b = (byte)i;
System.out.println(b);
}