boolean.isInstance(true)是false?

Mys*_*yst 3 java reflection field class instance

问题

布尔字段的类对象不会将其他布尔值识别为实例.

public class Test {
    public boolean b;
    public static void main(String[] args) {
        System.out.println(Test.class.getFields()[0].getType().isInstance(true));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果

false
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 7

方法是isInstance(Object)所以

x.isInstance(true)
Run Code Online (Sandbox Code Playgroud)

是相同的

x.isInstance(Boolean.TRUE);
Run Code Online (Sandbox Code Playgroud)

和Boolean.class不是boolean.class的子类.

注意:基元没有getClass()方法或任何方法.当您可以将它用作对象时,它已被装箱.


Psh*_*emo 6

从文档 Class#isInstance(Object obj)

...如果此Class对象表示基本类型,则此方法返回false.

请注意,期望参数始终是Object,这意味着它将始终是某个类的实例(不包括基本类型).

即使你在这里传递原始类型,它也会被自动装箱到它的包装类,但是这样的包装类与原始类型不同,Class并且在你的情况下返回getType().