为什么Boolean.class是java.lang.class而String.class是java.lang.String?

为什么Boolean.class是java.lang.class而String.class是java.lang.String?,java,android,generics,Java,Android,Generics,我正试图用Class指定的输入类型(errm..dirty hacked)实现一个通用方法 可以发现type==String.class,type.getClass().toString().compareTo(String.class.toString())==0) 但是,对于任何传入参数,type==boolean.class | | type==boolean.class始终为false 为什么Boolean.class是java.lang.class而String.class是 java

我正试图用
Class
指定的输入类型(errm..dirty hacked)实现一个通用方法

可以发现
type==String.class
type.getClass().toString().compareTo(String.class.toString())==0)

但是,对于任何传入参数,
type==boolean.class | | type==boolean.class
始终为false

为什么Boolean.class是java.lang.class而String.class是 java.lang.String

事实并非如此

public static void main(String[] args) {
    System.out.println(Boolean.class);
    System.out.println(boolean.class);
}
印刷品

class java.lang.Boolean
boolean

正如预期的那样。

不进行比较,而是先获取类,然后将其设置为字符串(以获取java.lang.string),以查看它是否等于硬编码字符串。请使用instanceof like:

public static void main(String[] args) {
    Object[] testData = {"", new Boolean(true), new Integer(2), new Long(3), true};

    for (Object object : testData) {
        typeCheck(object);
    }
}


private static void typeCheck(Object object) {
    StringBuilder b = new StringBuilder();
    b.append(object instanceof String).append(", ");
    b.append(object instanceof Boolean).append(", ");
    b.append(object instanceof Integer).append(", ");
    b.append(object instanceof Long);

    System.out.println("Testing: "+object.getClass().toString()+": "+b.toString());
}
输出:

测试:java.lang.String类:真、假、假、假
测试:类java.lang.Boolean:false,true,false,false
测试:java.lang.Integer类:false,false,true,false
测试:class java.lang.Long:false,false,false,true

测试:class java.lang.Boolean:false,true,false,false

我不理解你的问题。你好像在比较两件不同的事情。你真的没有给我们足够的信息继续下去。请提供一个简短但完整的程序来演示问题。
class java.lang.Boolean
boolean
public static void main(String[] args) {
    Object[] testData = {"", new Boolean(true), new Integer(2), new Long(3), true};

    for (Object object : testData) {
        typeCheck(object);
    }
}


private static void typeCheck(Object object) {
    StringBuilder b = new StringBuilder();
    b.append(object instanceof String).append(", ");
    b.append(object instanceof Boolean).append(", ");
    b.append(object instanceof Integer).append(", ");
    b.append(object instanceof Long);

    System.out.println("Testing: "+object.getClass().toString()+": "+b.toString());
}