即使传递的值在可接受的范围内,下面的代码也会出现编译错误。情况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个字节)隐式类型转换为byte
destination(1个字节)。
添加回答
举报
0/150
提交
取消