Class.toString 问题
一定要细心 2019-12-05 05:17:19 1. 比如 JDK8 Boolean 中有一个常量叫
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
2. 那么在 TYPE.toString() 方法下
public String toString() {
return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
+ getName();
}
3. 会执行 getName() 本地方法,在本地方法定义中 JVM_GetClassName 名字
static JNINativeMethod methods[] = {
{"getName0", "()" STR, (void *)&JVM_GetClassName}
};
4. 那么网上很多博客都千篇一律都说:
原文摘取:getName0根据一个数组获得对应的名称,JVM根据Java层的Class可得到对应类型的数组下标,比如这里下标为4,则名称为”boolean”。
const char* type2name_tab[T_CONFLICT+1] = {
NULL, NULL, NULL, NULL,
"boolean",
"char",
"float",
"double",
"byte",
"short",
"int",
"long",
"object",
"array",
"void",
"*address*",
"*narrowoop*",
"*conflict*"
};
疑惑:到底是怎么找到这个数组的???