即使传递的值在可接受的范围内,下面的代码也会出现编译错误。
案例1
void test(byte a, int b) { }
如果上述方法被称为test(2,3);
,则会产生编译错误,因为编译器认为test是一种接受两个int
参数但它有一个byte
和{{1 }}参数。
但是integer
的值可以是byte
到implicitly 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参数的情况(方法调用中的类型转换)。
答案 0 :(得分:1)
您不能简单地将字节传递给不同于long(0L
)或float(0F
)的方法。调用该方法时,必须转换为字节。发生这种情况是因为您传递了一个整数,而该整数期望一个字节。
test((byte) 2, (byte) 3);
通常的方法是使用byte[]
数组中的byes。
原始类型char
与可以包含0到65535的无符号整数(大于零)没什么不同。有关原始类型的更多信息,请访问Oracle documentation。
char:char数据类型是单个16位Unicode字符。最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。
答案 1 :(得分:1)
通常,当目标类型使用比源类型更大的内存区域时,就会发生隐式类型转换。
因此,char
源(2字节)可以隐式地转换为int
目标(4字节)。
但是,不能int
源(4字节)隐式地转换到byte
目标(1字节)。