プロが教えるわが家の防犯対策術!

なぜint型フィールドを持たないMyGenericsクラスが変数やリテラルを保持できるのでしょうか?
Objectクラスのフィールドを持っていますが、Objectクラスも、
フィールドは持っていませんよね?メソッドも空のObject()しか持っていないですし。
一応、javadocを読んだのですが、読み方間違えていますか?
http://dlc-cdn.sun.com/jdk/jdk-api-localizations …

--------------------code--------------------------------
public class MyGenericsTest {


public static void main(String[] args) {
int x = 234;

MyGenerics g = new MyGenerics(x);
Integer i = (Integer)g.get();
System.out.println(i);

}

}

class MyGenerics {
Object o;
public MyGenerics(Object o){
this.o = o;
}
public Object get(){
return o;
}
}

A 回答 (1件)

java5から導入されたオートboxingという機能があります。



プリミティブ型を自動的に適切なラッパークラスに包んだオブジェクトに変換するものです。

つまり、

MyGenerics(x)

というのは自動的に、

MyGenerics(new Integer(x))


に変換されています。


Objectクラスは、全てのクラスのスーパークラスですから、

Object変数にIntegerを代入することは問題ありません。


という説明でわかると思いますがいかがですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!