为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑的夜晚无繁华 2021-05-05 13:22:59
即使传递的值在可接受的范围内,下面的代码也会出现编译错误。情况1void test(byte a, int b) { }如果上面的方法由于test(2,3);产生编译错误而被调用,因为编译器理解test是一个接受两个int参数但有一个byte和integer参数的方法。但是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参数(方法调用中的类型转换)。
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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

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

但是,int不能将source(4个字节)隐式类型转换为bytedestination(1个字节)。


查看完整回答
反对 回复 2021-05-26
?
月关宝盒

TA贡献1772条经验 获得超5个赞

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

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

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

  2. 基本类型char与可以包含0到65535的值的无符号(大于零)整数没有什么不同。有关该基本类型的更多信息,请参见Oracle文档

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


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信