getName、getCanonicalName、getSimpleName的区别

普通类---------------------------

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去除包名

原文地址:https://www.cnblogs.com/lay2017/p/12185959.html