Java で、パラメーターを持つ関数があるとしますdouble a
。引数として整数を渡すと機能しますか? (つまり、暗黙的な変換はありますか?) 逆の場合: たとえば整数をパラメーターとして持ち、double を渡す場合は?
残念ながら、現時点ではコードをコンパイルできません。このアサートを確認したいと思います。ご清聴ありがとうございました。
Java で、パラメーターを持つ関数があるとしますdouble a
。引数として整数を渡すと機能しますか? (つまり、暗黙的な変換はありますか?) 逆の場合: たとえば整数をパラメーターとして持ち、double を渡す場合は?
残念ながら、現時点ではコードをコンパイルできません。このアサートを確認したいと思います。ご清聴ありがとうございました。
の詳細については、 JLS - セクション #5.3を参照してくださいMethod Invocation Conversion
。
メソッド呼び出しコンテキストでは、次のいずれかを使用できます。
- 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.
したがって、最初の呼び出し ( int
to ) はルール 2double
に従って正常に機能します。
しかし、同じセクションでさらに引用されているステートメントによると、2 番目の呼び出し ( double
to int
) はCompiler Errorを返します。
メソッド呼び出しコンテキストで許可されている変換によって式の型をパラメーターの型に変換できない場合、コンパイル時エラーが発生します。
doubleを整数に設定できるため、引数としての整数は、パラメーターとしてdoubleを使用して機能しても問題ありません。他の方法では失敗します。その場合、doubleをintにキャストする必要があります。同じことが通常の譲受人にも当てはまります。
int i = 6;
double d = 0;
d = i; /* ok
i = d ; /* not ok
関数に のパラメーターを持たせることで、これを回避できる場合がありますNumber
。これは と の両方が継承するオブジェクトであるInteger
ためDouble
、Double
数値とInteger
数値が同じように動作するまで、これは機能します。
integer
プリミティブとdouble
オブジェクトInteger
との間には違いがあることに注意してくださいDouble
。Java はオートボクシングを使用して、関数呼び出しなどでこれらの型を自動的に変換します。