10

Java で、パラメーターを持つ関数があるとしますdouble a。引数として整数を渡すと機能しますか? (つまり、暗黙的な変換はありますか?) 逆の場合: たとえば整数をパラメーターとして持ち、double を渡す場合は?

残念ながら、現時点ではコードをコンパイルできません。このアサートを確認したいと思います。ご清聴ありがとうございました。

4

4 に答える 4

15

の詳細については、 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.

したがって、最初の呼び出し ( intto ) はルール 2doubleに従って正常に機能します。

しかし、同じセクションでさらに引用されているステートメントによると、2 番目の呼び出し ( doubleto int) はCompiler Errorを返します。

メソッド呼び出しコンテキストで許可されている変換によって式の型をパラメーターの型に変換できない場合、コンパイル時エラーが発生します。

于 2012-11-07T20:32:17.347 に答える
3

doubleを整数に設定できるため、引数としての整数は、パラメーターとしてdoubleを使用して機能しても問題ありません。他の方法では失敗します。その場合、doubleをintにキャストする必要があります。同じことが通常の譲受人にも当てはまります。

  int i = 6;
  double d = 0;
  d = i;  /* ok
  i = d ; /* not ok
于 2012-11-07T20:45:59.387 に答える
1

関数に のパラメーターを持たせることで、これを回避できる場合がありますNumber。これは と の両方が継承するオブジェクトであるIntegerためDoubleDouble数値とInteger数値が同じように動作するまで、これは機能します。

integerプリミティブとdoubleオブジェクトIntegerとの間には違いがあることに注意してくださいDouble。Java はオートボクシングを使用して、関数呼び出しなどでこれらの型を自動的に変換します。

于 2012-11-07T20:41:34.900 に答える