黑马程序员技术交流社区

标题: java instanceof判断问题 [打印本页]

作者: 张甲甲    时间: 2013-5-16 21:29
标题: java instanceof判断问题
本帖最后由 张甲甲 于 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);
  
}
}
作者: Jacky_Chen1990    时间: 2013-5-16 21:56
这个 instance 是判断是否是这个类的对象的 为什么是3个 坐等楼下解答。
作者: SOAR    时间: 2013-5-16 22:06
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,其实程序就是生活,不要把它想的多么抽象,多联系联系生活。
作者: Neverbelazy    时间: 2013-5-17 01:28
本帖最后由 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
作者: xiewen    时间: 2013-5-21 01:24
对象 instanceof 方法名 是错的,应该是 对象 instanceof 类名,就是用来判断某个对象是否是某个类的实例。
作者: Miss小强    时间: 2013-5-21 07:34
instanceof是判断某个对象是否是该类型或者该类型的子类型;instanceof Object一定为true;
如果要想确切性的判断建议使用这种方式:
base.getClass()==Student.class;
这种方式相对优雅。。。




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