对于一般的type来说,这二者没有区别,对于array和inner type,就有区别了,可以写代码亲测,如下:
package simple; class Box {
class Inner {}
} public class Foo {
public static void main(String[] args) throws Exception {
// Ordinary class:
System.out.println(Box.class.getCanonicalName());
System.out.println(Box.class.getName());
// Inner class:
System.out.println(Box.Inner.class.getCanonicalName());
System.out.println(Box.Inner.class.getName());
// Array type:
System.out.println(args.getClass().getCanonicalName());
System.out.println(args.getClass().getName());
}
}
一般,用于load class的时候,比如说Class.forName,就需要用Class.getName而不是Class.getCononicalName