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

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

情况1

void test(byte a, int b) { }

如果上面的方法由于test(2,3);产生编译错误而被调用,因为编译器理解test是一个接受两个int参数但有一个byteinteger参数的方法。

但是byte值可以是implicitly typecastedto int,那么这里的问题是什么?

byte x=2; //valid as value is in between -128 to 127.

与在函数调用中传递参数的情况相同test(2, 3),可以将2分配给测试方法参数byte a,但是为什么会出现编译错误。

情况二

void test(int ch) { }

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

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

如果是这样的话,为什么在上述方法中将字符文字传递给int参数(方法调用中的类型转换)。


慕尼黑的夜晚无繁华
浏览 217回答 2
2回答

扬帆大鱼

通常,当目标类型使用比源类型更大的内存区域时,就会发生隐式类型转换。因此,char可以将源(2个字节)隐式类型转换为int目标(4个字节)。但是,int不能将source(4个字节)隐式类型转换为bytedestination(1个字节)。

月关宝盒

您不能简单地将byte传递给与long(0L)或float(0F)不同的方法。调用该方法时,您必须转换为字节。发生这种情况是因为您在传递整数时需要一个字节。test((byte) 2, (byte) 3);通常的方法是使用byes数组byte[]。基本类型char与可以包含0到65535的值的无符号(大于零)整数没有什么不同。有关该基本类型的更多信息,请参见Oracle文档。char:char数据类型是单个16位Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java