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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-16 21:29  /  1519 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张甲甲 于 2013-5-24 13:32 编辑

我就是没有弄明白 它是判断什么。
比如 对象 instanceof 方法名。
这是谁判断谁啊,是对象判断 方法名 还是方法名判断  对象,
这个代码运行之后是 3个 true. 不知道为什么
希望帮解答一下....
public class Shout {
String name="Person";
public void Shout(){
  
  System.out.println(name);
  
}

}
class Student extends Shout{
public void methodB(){
  String name="Student";
  String School="school";
  
  System.out.print("Child methodB");
}
}
class Sample{
public static void main(String []args){
  Shout base=new Student();
  System.out.println(base instanceof Student);
  System.out.println(base instanceof Shout);
  System.out.println(base instanceof Object);
  
}
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

5 个回复

倒序浏览
这个 instance 是判断是否是这个类的对象的 为什么是3个 坐等楼下解答。
回复 使用道具 举报
1 Shout base=new Student();
2 System.out.println(base instanceof Student);
3  System.out.println(base instanceof Shout);
  4 System.out.println(base instanceof Object);
第一句父类引用指向子类对象,运用了多态。就像 Dog dog = new SomeKindOfDog();
第二句判断:base是一种学生吗?很显然,它是
第三局判断:base是一种shout吗?很显然,它已经是一个学生了,而学生又是一种shout,所以base也是一种shout
第三局判断:base是一种对象吗?这是必须的啊,自然界的什么东西不是一种对象呢?
综上所述:它就是会输出三个true,其实程序就是生活,不要把它想的多么抽象,多联系联系生活。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Neverbelazy 于 2013-5-17 01:39 编辑

0. 其实看到代码的结果, 应该就有了答案, 楼主只是想得到一个可以证实自己想法的出处, instanceof干啥,是JVM说了算的,具体可以看Java文档
1. instanceof 的作用是判断其左边对象(不是引用)是否为其右边类的实例(包括子类),返回boolean类型的数据
2. instanceof 可以用作判断 继承关系 和 实现关系 (实例特点),注意区别: person.getClass()== Person.class
3. 所以,参考如下简化了的代码, 就理解了instanceof 的用法就可以了
  1. class Father{}
  2. interface Man{}
  3. class Son extends Father implements Man{}
  4. public class InstanceofTest{
  5.         public static void main(String[] args{
  6.                  Son ofBitch= new Son();   // 前面引用类型改成Father/Man 结果都一样
  7.                  System.out.println(ofBitch instanceof Son);
  8.                  System.out.println(ofBitch instanceof Father);
  9.                  System.out.println(ofBitch instanceof Man);
  10.         }
  11. }
复制代码
输出: true true true
参考连接: http://baike.baidu.com/view/1989052.htm

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
对象 instanceof 方法名 是错的,应该是 对象 instanceof 类名,就是用来判断某个对象是否是某个类的实例。
回复 使用道具 举报
instanceof是判断某个对象是否是该类型或者该类型的子类型;instanceof Object一定为true;
如果要想确切性的判断建议使用这种方式:
base.getClass()==Student.class;
这种方式相对优雅。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马