黑马程序员技术交流社区

标题: 反射类型判断 [打印本页]

作者: t_mac    时间: 2011-12-18 11:25
标题: 反射类型判断
本帖最后由 t_mac 于 2011-12-19 10:14 编辑

在判断类型的时候下面两种方式:
if(obj  instanceof  String){//obj 为Object 类型
   
}与
if(obj.getClass() ==  String.class){//obj 为Object 类型

}有什么区别吗?
作者: 王冀    时间: 2011-12-18 13:13
实现的原理不同吧

还可以这样:

if(String.class.isInstance(obj)){//obj 为Object 类型
   
}
作者: 王柠    时间: 2011-12-18 16:04
我只知道  obj.getClass() ==  String.class  判断两者的类型是否确切的相同。
obj   instanceof  Object   判断obj是否是Object的对象或者是Object子类的对象,但对于String来说,因为String是final无子类的,所以当此对象不是String类型则返回false。在学习中。。。{:soso_e130:}

作者: 韩军博    时间: 2011-12-18 19:56
本帖最后由 韩军博 于 2011-12-18 20:00 编辑

(1)if(obj  instanceof  String){
   
}
(2)if(obj.getClass() ==  String.class){

}
(1)(2)从本质来讲是没有什么区别的,都是为了判断obj到底是不是String类型的变量。

应用场景可能是:obj是一个方法的参数,而调用该方法时传递真正类型的参数。
(1)的话相信楼主一定能够理解。

我就主要说(2)。
对象名.getClass()是获取该对象所对应的类在内存中的字节码,只要是同一种类型的对象,在
内存的字节码文件就是同一份。假设用到了String这种类型,则内存中只有String.class这一份
字节码,如果obj是String类型的参数的话,则得到的还是同一份的String.class字节码。==这个操作符
就是判断的内存地址是否相同。从而就得出结论了。

作者: 刘健    时间: 2011-12-18 20:12
instanceof是Java的一个二元操作符,和==,>,<是同一类东西。但是一般认为他没有很好的利用面向对象的多态性,所以很少用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2