对于一般的type来说,这二者没有区别,对于array和inner type,就有区别了,可以写代码亲测,如下:
1 package simple; 2 3 class Box { 4 class Inner {} 5 } 6 7 public class Foo { 8 public static void main(String[] args) throws Exception { 9 // Ordinary class: 10 System.out.println(Box.class.getCanonicalName()); 11 System.out.println(Box.class.getName()); 12 // Inner class: 13 System.out.println(Box.Inner.class.getCanonicalName()); 14 System.out.println(Box.Inner.class.getName()); 15 // Array type: 16 System.out.println(args.getClass().getCanonicalName()); 17 System.out.println(args.getClass().getName()); 18 } 19 }
一般,用于load class的时候,比如说Class.forName,就需要用Class.getName而不是Class.getCononicalName