如果你不确定某事,请尝试先写一个测试。
我这样做:
//primitive
System.out.println(int.class.getName());
System.out.println(int.class.getCanonicalName());
System.out.println(int.class.getSimpleName());
System.out.println();
//class
System.out.println(String.class.getName());
System.out.println(String.class.getCanonicalName());
System.out.println(String.class.getSimpleName());
System.out.println();
//inner class
System.out.println(HashMap.SimpleEntry.class.getName());
System.out.println(HashMap.SimpleEntry.class.getCanonicalName());
System.out.println(HashMap.SimpleEntry.class.getSimpleName());
System.out.println();
//anonymous inner class
System.out.println(new Serializable(){}.getClass().getName());
System.out.println(new Serializable(){}.getClass().getCanonicalName());
System.out.println(new Serializable(){}.getClass().getSimpleName());
打印:
int
int
int
java.lang.String
java.lang.String
String
java.util.AbstractMap$SimpleEntry
java.util.AbstractMap.SimpleEntry
SimpleEntry
ClassnameTest$1
null
在最后一个块中有一个空行,其中getSimpleName返回一个空字符串。
看这个的结果是:
>名称是您将用于动态加载类的名称,例如,使用默认ClassLoader调用Class.forName。>规范名称是将在import语句中使用的名称,并且唯一标识该类。在toString或日志操作期间可能有用。>简单名称松散地标识类,在toString或日志操作期间也可能是有用的,但不能保证是唯一的。