如何将char值传递给int参数的方法

时间:2018-07-14 11:54:12

标签: java methods casting char byte

即使传递的值在可接受的范围内,下面的代码也会出现编译错误。

案例1

void test(byte a, int b) { }

如果上述方法被称为test(2,3);,则会产生编译错误,因为编译器认为test是一种接受两个int参数但它有一个byte和{{1 }}参数。

但是integer的值可以是byteimplicitly typecasted,那么这是什么问题?

int

与在函数调用byte x=2; //valid as value is in between -128 to 127. ,2中传递参数的情况相同,可以将2分配给测试方法参数test(2, 3),但是为什么会出现编译错误。

案例2

byte a

上面的代码接受int参数,但是当传递char值时,它将成功编译。所以,这是奇怪的行为。

有人认为,当将字面值分别分配给变量而不是方法调用时,这种隐式转换适用。 (同意案例1,然后同意案例2)。

如果是上述方法中将字符文字传递给int参数的情况(方法调用中的类型转换)。

2 个答案:

答案 0 :(得分:1)

  1. 您不能简单地将字节传递给不同于long(0L)或float(0F)的方法。调用该方法时,必须转换为字节。发生这种情况是因为您传递了一个整数,而该整数期望一个字节。

    test((byte) 2, (byte) 3);
    

    通常的方法是使用byte[]数组中的byes。

  2. 原始类型char与可以包含0到65535的无符号整数(大于零)没什么不同。有关原始类型的更多信息,请访问Oracle documentation

      

    char:char数据类型是单个16位Unicode字符。最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。

答案 1 :(得分:1)

通常,当目标类型使用比源类型更大的内存区域时,就会发生隐式类型转换。

因此,char源(2字节)可以隐式地转换为int目标(4字节)。

但是,不能int源(4字节)隐式地转换到byte目标(1字节)。