Java:将具有不同类型的参数传递给函数

在Java中,假设我们有一个带参数double a的函数。 如果我传递一个整数作为参数,它是否有效? (我的意思是,是否存在隐式转换?)在相反的情况下:如果我有一个整数作为参数,我传递一个double?

不幸的是,我目前无法编译我的代码,我想查看这个断言。 感谢您的关注。

有关Method Invocation Conversion详细信息,请参阅JLS – 第5.3节 。

方法调用上下文允许使用以下之一:

 - an identity conversion (§5.1.1) - a widening primitive conversion (§5.1.2) - a widening reference conversion (§5.1.5) - a boxing conversion (§5.1.7) optionally followed by widening reference conversion - an unboxing conversion (§5.1.8) optionally followed by a widening primitive conversion. 

因此,根据规则#2 ,您的第一次调用( int to double )将正常工作。

但根据同一部分中引用的声明,第二次调用( double to int )将给出编译器错误 : –

如果表达式的类型无法通过方法调用上下文中允许的转换转换为参数类型,则会发生编译时错误。

你可以通过使你的函数采用Number参数来解决这个问题。 这是一个IntegerDouble都inheritance的Object,所以直到Double数字和Integer数字的行为相同,这都行。

请注意,基元integerdouble以及Objects IntegerDouble之间存在差异。 Java使用自动装箱在函数调用等中自动转换这些类型。

因为你可以将double设置为一个整数,所以整数作为参数可以使用double作为参数。 其他方式失败。 在这种情况下,您需要将double转换为int。 同样适用于普通受让人,例如……

  int i = 6; double d = 0; d = i; /* ok i = d ; /* not ok