A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© t_mac 黑马帝   /  2011-12-18 11:25  /  2180 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 t_mac 于 2011-12-19 10:14 编辑

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

}有什么区别吗?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
王冀 黑马帝 2011-12-18 13:13:04
沙发
实现的原理不同吧

还可以这样:

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 韩军博 于 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字节码。==这个操作符
就是判断的内存地址是否相同。从而就得出结论了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
刘健 黑马帝 2011-12-18 20:12:55
报纸
instanceof是Java的一个二元操作符,和==,>,<是同一类东西。但是一般认为他没有很好的利用面向对象的多态性,所以很少用

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马