因为 instanceof 是其关键字,所以不看jvm规范,不会知道其具体操作的。选择的话,当然是instanceof了。

解决方案 »

  1.   

    s.getClass().getName().compareTo("java.lang.String") == 0和s instanceof String是不一样的,假设这样的代码Object obj = new String("");
    obj.getClass().getName().compareTo("java.lang.String")应该会小于0,因为返回的是java.lang.Object而 obj instanceof String 就会返回 true 了
      

  2.   

    根据身边的高手说:instanceof 是内制在JVM中 ,编译以后就是一条指令,所以更快
      

  3.   

    tigeryu(吴越小虎) 说的不对呀
    getClass()返回的是运行时类型,和编译时声明的类型无关.不过我觉得还是instanceof好
      

  4.   

    to  tigeryu(吴越小虎) 
    你的说法是错误的!obj.getClass().getName() 和obj在这里声明的类型没有任何关系,它返回的还是真正的类名
    即java.lang.String由于String是final没有代表性,如果是随便一个类,这两个是有区别的:s.getClass().getName().compareTo("mypacakge.MyClass") == 0和s instanceof MyClass前者 s 必须是 MyClass的实例,即使是它的子类也不行!
    后者 s 只要是MyClass或者它的子类就可以了
    后者的效率高多了
      

  5.   

    instanceof的意思是“is a”,如"dd" instanceof Object表示:
    "dd"是不是一个Object,当然是了,所有的子类都可以说是父类,但是getClass().getName()返回的是真正类的类明,一个返回"java.lang.String",而一个返回"java.lang.Object",当然就不等了