s.getClass().getName().compareTo("java.lang.String") == 0和s instanceof String判断类型时在性能或内部实现是有什么区别 因为 instanceof 是其关键字,所以不看jvm规范,不会知道其具体操作的。选择的话,当然是instanceof了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 了 根据身边的高手说:instanceof 是内制在JVM中 ,编译以后就是一条指令,所以更快 tigeryu(吴越小虎) 说的不对呀getClass()返回的是运行时类型,和编译时声明的类型无关.不过我觉得还是instanceof好 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或者它的子类就可以了后者的效率高多了 instanceof的意思是“is a”,如"dd" instanceof Object表示:"dd"是不是一个Object,当然是了,所有的子类都可以说是父类,但是getClass().getName()返回的是真正类的类明,一个返回"java.lang.String",而一个返回"java.lang.Object",当然就不等了 Java程序如何运行?? struts2的问题 swtich的参数为什么不允许是String形的。 java中的paint()方法 zdsxj2002进来 只能在java命令行运行,请教? 进制转换 帮忙看一下我的applet代码 一个简单的加密问题(500分) jb9下面 添加类库出现问题 关于Decimal类型的问题 类型转换时出现错误java.lang.ClassCastException
obj.getClass().getName().compareTo("java.lang.String")应该会小于0,因为返回的是java.lang.Object而 obj instanceof String 就会返回 true 了
getClass()返回的是运行时类型,和编译时声明的类型无关.不过我觉得还是instanceof好
你的说法是错误的!obj.getClass().getName() 和obj在这里声明的类型没有任何关系,它返回的还是真正的类名
即java.lang.String由于String是final没有代表性,如果是随便一个类,这两个是有区别的:s.getClass().getName().compareTo("mypacakge.MyClass") == 0和s instanceof MyClass前者 s 必须是 MyClass的实例,即使是它的子类也不行!
后者 s 只要是MyClass或者它的子类就可以了
后者的效率高多了
"dd"是不是一个Object,当然是了,所有的子类都可以说是父类,但是getClass().getName()返回的是真正类的类明,一个返回"java.lang.String",而一个返回"java.lang.Object",当然就不等了