黑马程序员技术交流社区

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

作者: 边道坚    时间: 2013-3-19 21:21
标题: instanceof判断问题
本帖最后由 边道坚 于 2013-3-19 23:13 编辑

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

  8. }
  9. class Student extends Shout{
  10. public void methodB(){
  11.   String name="Student";
  12.   String School="school";
  13.   
  14.   System.out.print("Child methodB");
  15. }
  16. }
  17. class Sample{
  18. public static void main(String []args){
  19.   Shout base=new Student();
  20.   System.out.println(base instanceof Student);
  21.   System.out.println(base instanceof Shout);
  22.   System.out.println(base instanceof Object);
  23.   
  24. }
  25. }
复制代码

作者: 丁一    时间: 2013-3-19 21:26
判断instanceof 前面的是否属于后面的
base 是 Student的对象   输出true
Student 又继承Shout   输出true
Object 又是所有对象的父类  也输出true了  
作者: 杨博    时间: 2013-3-19 21:29
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:

  String s = "I AM an Object!";
  boolean isObject = s instanceof Object;

  我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。

作者: 刘国涛    时间: 2013-3-19 21:34
instanceof是用于判断对象的类型
Shout base=new Student();//多态,base指向Student类型
System.out.println(base instanceof Student);//判断base是否指向Student类型,true
System.out.println(base instanceof Shout);//判断base指向Shout类型,Shout是Student的父类,所以为true
System.out.println(base instanceof Object);//判断base指向Object类型,true,理由同上
作者: 张亚青    时间: 2013-3-19 21:40
a instanceOf B 是判断 a是否是B的对象
需要注意的是 instanceOf 判断的是变量a在创建对象时new出的实例对象,而与声明的a的类型无关。
比如: Shout base=new Student();  中判断的是base指向的Studen实例t对象,而不是声明的Shout对象。

所以问题中的三句话相当于判断:
21.  System.out.println(base instanceof Student);//base指向的Student对象是否是Student类的实例对象?   答案是true

22.  System.out.println(base instanceof Shout);//base指向的Student对象是否是Shout类的实例对象?   答案是true


23.  System.out.println(base instanceof Object);//base指向的Student对象是否是Object类的实例对象?   答案是true

作者: 边道坚    时间: 2013-3-19 21:56
丁一 发表于 2013-3-19 21:26
判断instanceof 前面的是否属于后面的
base 是 Student的对象   输出true
Student 又继承Shout   输出true

谢谢你的回答




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