如果在java中将整数值作为参数传递,则隐式类型转换不起作用

时间:2013-12-07 14:57:06

标签: java byte implicit

在下面的代码中,对整数值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);
    }
}

请解释一下为什么后一个代码中没有发生隐式(自动类型转换)?

感谢所有人的期待。

2 个答案:

答案 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);
    }