8

java.lang.Double オブジェクトが、コンストラクターへの呼び出しを使用せずにプリミティブを使用して初期化されるとどうなりますか? 動作しているように見えますが、その理由はよくわかりません。コンパイラで何らかの暗黙の変換が行われていますか? これはJava 5を使用しています。

public class Foo {

    public static void main(String[] args) {
        Double d = 5.1;

        System.out.println(d.toString());

    }

}
4

3 に答える 3

10

これは、Java 5 で追加された機能であるオートボクシングdoubleと呼ばれます。プリミティブ型と(プリミティブ) やjava.lang.Double(オブジェクト ラッパー)などのラッパー型の間で自動的に変換されます。Java コンパイラは、次の行を自動的に変換します。

Double d = 5.1;

の中へ:

Double d = Double.valueOf(5.1);
于 2010-07-20T13:58:38.350 に答える
5

それはオートボクシングと呼ばれます

プリミティブ型のオートボクシングとオートアンボクシング int、boolean などのプリミティブ型と、それに対応する Integer や Boolean などの同等のオブジェクトベースの型の間の変換では、特に変換がメソッド呼び出しにのみ必要な場合は、不要な量の追加コーディングが必要になる可能性があります。たとえば、コレクション API。

Java プリミティブのオートボクシングとオート アンボックスにより、より簡潔で理解しやすいコードが生成されます。次の例では、int が格納され、ArrayList から取得されます。5.0 バージョンでは、Integer に移行してコンパイラに戻るために必要な変換が残されています。

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, new Integer(42)); 
  int total = (list.get(0)).intValue();

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, 42);
  int total = list.get(0);
于 2010-07-20T13:59:12.287 に答える
3

これはオートボクシングと呼ばれます。

于 2010-07-20T13:59:18.277 に答える