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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Miss小强 于 2013-5-12 10:31 编辑

不多说上代码:
  1. Object obj = new ArrayList();
  2.                
  3.                 //1111111111111111111111111
  4.                 if (obj instanceof ArrayList) {
  5.                         ArrayList list=(ArrayList)obj;
  6.                 }
  7.                 //22222222222222222222222
  8.                 if(obj!=null){
  9.                         if(obj.getClass()==ArrayList.class){
  10.                                 ArrayList list=(ArrayList)obj;
  11.                         }
  12.                 }
复制代码
ps:instanceof关键字是怎么判断的?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

11 个回复

倒序浏览
不懂,占位看高手解答
回复 使用道具 举报
if (obj instanceof ArrayList)该语句会判断obj引用的对象所属的类型是否是ArrayList类或其子类(包含间接子类),如果是判断语句返回true,否则返回false。
回复 使用道具 举报
你这个问题问的有意思
我看了看相关的资料。这里还是有一定的区别的,我个人理解:
对于instanceof的比较,是将obj作为ArrayList的一个实例对象存在的,是通过获取这个对象的类型信息和ArrayList比较是不是属于这个类型,但是,如果你要是换成Object,一样是true的。
而对于比较字节码对象,是从内存中获得的是唯一的那份字节码,比较是不是同一份字节码,但是,如果你换成Object.class的话,就不会是true了。按说这种方式是更精准的,但是一般常用的是instanceof的比较。
这个instanceof其实和“=、<、>”等是一样的,只不过是用字母作为运算符而已。
建议楼主自己再测试一下:


  1.                 //1111111111111111111111111
  2.                 Object obj = new ArrayList();
  3.                 if (obj instanceof ArrayList) {
  4.                         System.out.println(111111);
  5.                         ArrayList list1=(ArrayList)obj;
  6.                 }
  7.                 //22222222222222222222222
  8.                 Object obj2 = new ArrayList();
  9.                 if(obj.getClass()== ArrayList.class){
  10.                         System.out.println("22222");
  11.                         ArrayList list2=(ArrayList)obj2;
  12.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
曹睿翔 来自手机 金牌黑马 2013-5-11 12:49:19
报纸
哈哈,java核心技术书看着不错吧
回复 使用道具 举报
黄玉昆 发表于 2013-5-11 12:35
你这个问题问的有意思
我看了看相关的资料。这里还是有一定的区别的,我个人理解:
对于instanceof的比较, ...

查了下资料: java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

按照你的建议试了下,确实有不同的效果:
  1. Object obj=new ArrayList();
  2.         if(Object.class==obj.getClass()){
  3.                 System.out.println("==");
  4.         }
  5.         
  6.         if(obj instanceof Object){
  7.                 System.out.println("instance");
  8.         }
复制代码
第二个判断语句竟然执行了 ,不过照这样说的话,instanceof有点不靠谱啊,
不过按常理来说,所有的类都属于Object,应该也可以理解;
还是看具体需求吧。。。有长见识了。。。
回复 使用道具 举报
曹睿翔 发表于 2013-5-11 12:49
哈哈,java核心技术书看着不错吧

是啊,每天就看几页,然后拼命有道,只能说痛并快乐着。。。有时间你也look look,确实不错的书。。。
回复 使用道具 举报
曹睿翔 来自手机 金牌黑马 2013-5-11 13:48:33
8#
Miss小强 发表于 2013-5-11 13:05
是啊,每天就看几页,然后拼命有道,只能说痛并快乐着。。。有时间你也look look,确实不错的书。。。 ...

你还看英文版,厉害厉害
我每天看一二十页,去黑马前看完
回复 使用道具 举报
曹睿翔 发表于 2013-5-11 13:48
你还看英文版,厉害厉害
我每天看一二十页,去黑马前看完

我估摸着也差不多,到后来速度会变快的,云四开班还有一个多月呢。。。
大家一起加油 吧。。。
回复 使用道具 举报
曹睿翔 发表于 2013-5-11 13:48
你还看英文版,厉害厉害
我每天看一二十页,去黑马前看完

你的是中文版吗?能不能帮我看下第四章:Collections,
中Collection陷阱(Collection Gotchas)小节中的集合问题(Collection Problems)
就是最后一个知识点集合问题讲的是什么意思,看了半天都没看懂。。。不知道什么意思,
不过貌似这里蛮重要的。。。
回复 使用道具 举报
Miss小强 发表于 2013-5-11 16:15
你的是中文版吗?能不能帮我看下第四章:Collections,
中Collection陷阱(Collection Gotchas)小节中的 ...

昨天有事,下午回宿舍我给你看看
回复 使用道具 举报
曹睿翔 发表于 2013-5-12 09:51
昨天有事,下午回宿舍我给你看看

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