2014-12-09 2 views
2

나는 java.lang.Class#isAssignableFromJava Reflection in Action에서 찾고 있습니다.클래스 # isAssignableFrom with Object 및 double

Object.class.isAssignableFrom(double.class):false으로 인쇄되는 이유는 무엇입니까? f100.0으로 인쇄됩니까?

public class IsAssignableFrom { 
    public static void main(String[] args) { 
     double d = 100; 
     Object o = null; 

     System.out.println("Object.class.isAssignableFrom(double.class): " + 
      Object.class.isAssignableFrom(double.class)); 

     Object f = d; 
     System.out.println("f: " + f); 
    } 
} 

테스트를 실행 해 봅시다.

>javac IsAssignableFrom.java && java -cp . IsAssignableFrom 
f: 100.0 
Object.class.IsAssignableFrom(d): false 
+0

'Object f = d; '를 사용할 수 있다는 것은'Object'가'double'의 상위 타입 ('isAssignableFrom' 결과로 확인 됨)을 의미하지 않는다는 것을 의미합니다. 단지 autoboxing이' 더블 '을 선택하면됩니다. – Pshemo

답변

4

double은 기본 유형입니다. 원시적 형에는 공통의 슈퍼 타입이 존재하지 않습니다. 즉, Object.classdouble.class의 수퍼 클래스를 나타내지 않습니다.

복싱 변환은 double 유형의 값에 적용 할 수 있으며 Double 유형의 값으로 변환 할 수 있습니다.이 유형은 Object의 하위 유형입니다. 그렇기 때문에 df에게 할당 할 수 있습니다.