普通类---------------------------
getName: cn.lay.GetNameDemo
getSimpleName: GetNameDemo
getCanonicalName: cn.lay.GetNameDemo
普通类型的getName和getCanonicalName是没有区别的,getSimpleName没有包名
数组---------------------------
getName: [Lcn.lay.GetNameDemo;
getSimpleName: GetNameDemo[]
getCanonicalName: cn.lay.GetNameDemo[]
数组类型的getName返回的是虚拟机的表示方式,而getCanonicalName返回的是适用于人阅读的表示方式
内部类---------------------------
getName: cn.lay.GetNameDemo$A
getSimpleName: A
getCanonicalName: cn.lay.GetNameDemo.A
内部类的getName是$作为分割符号,getCanonicalName是用 . 作为分隔符
匿名内部类---------------------------
getName: cn.lay.GetNameDemo$$Lambda$4/282432134 getSimpleName: GetNameDemo$$Lambda$4/282432134 getCanonicalName: cn.lay.GetNameDemo$$Lambda$4/282432134
匿名内部类getCanonicalName使用了和getName一样的表达方式
基本类型数组---------------------------
getName: [I getSimpleName: int[] getCanonicalName: int[]
基本类型的数组没有包名,getName返回虚拟机表示方式,getCanonicalName返回人阅读的方式
简单来说,getName与虚拟机表达方式相关,而getCanonicalName与人的阅读习惯相关,getSimpleName去除包名