黑马程序员技术交流社区

标题: instanceof是什么意思,有什么作用 [打印本页]

作者: 程立彬    时间: 2011-11-21 17:24
标题: instanceof是什么意思,有什么作用
本帖最后由 程立彬 于 2011-11-23 13:26 编辑

视频上面 if(obj instanceof Person){}  Person 是一个类 obj是object类对象
作者: 袁世宇    时间: 2011-11-21 17:28
本帖最后由 袁世宇 于 2011-11-21 17:31 编辑

个人是这么理解:

obj instanceof Person ,返回值为boolean类型,用来判断obj是否是Person的实例对象或者B子类的实例对象。如果是则返回true,否则返回false。

作者: 刘一扬    时间: 2011-11-21 17:42
if(obj instanceof Person){}  Person 是一个类 obj是object类对象:  判断obj是否为Person类或Person子类的对象
作者: 崔浩    时间: 2011-11-21 17:42
instanceof一般和强制运算一起使用的,instanceof 用于判断前面的操作数的编译时类型时候是后面类,或者其子类实现类的实例,一般返回true,或false,如果操作的两个数没有一点关系(也就是说instanceof前面操作数的编译类型要么与后面的类相同,要么是后面类的父类)否则会引起编译错误
作者: 冯敏    时间: 2011-11-21 19:56
测试左边的对象是否是右边对象的实例,如果是返回true,不是返回false
作者: 张志东    时间: 2011-11-21 20:07
再补充一点:你可以理解成一个特殊的操作符
作者: 常文艺    时间: 2011-11-21 20:08
它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。可以用在继承中的子类的实例是否为父类的实现。
  举个例子:
  String s = "I AM an Object!";
  boolean isObject = s instanceof Object;
  我们声明了一个String对象引用,指向一个String对象,然后用instanceof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为true。
作者: 张冬冬    时间: 2011-11-21 23:15
意思就是看obj这个对象是不是person类型的,
一般在多态的时候多用instanceof判断,看创建的这个类是不是父类类型的,是的话在把子类类型转回父类类型来用。
作者: zhou_411424    时间: 2011-11-22 08:00
instanceof 一般是用在具有继承关系的两个类型之间
下面声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类或本类的一个实例。也就是测试它左边的对象是否是它右边的类的实例
String str1 = "abc";
System.out.println(str1 instanceof String);//返回true
System.out.println(str1 instanceof Object);//返回true
System.out.println(str instanceof Integer);//此句错误,不可以这么用。String类型和Integer类型根本就没有关系,更不用说谁是谁的实例了

如果对象引用为null时,又会怎样呢?
String str2 = null;
System.out.println(str2 instanceof Object);//返回false

instanceof在多态中的应用是很广的。
instanceof 通常是用于判断父类或者接口的引用是否是某个子类的实例

下面以继承说明:
class Person{
        private String name;

        public Person(String name) {
                super();
                this.name = name;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }
       
}
class Student extends Person{
        public Student(String name) {
                super(name);
        }
}

测试代码如下
Person stu = new Student("zhangsan");
Student stu2 = new Student("lisi");
if(stu instanceof Person){
        Student s1 = (Student) stu;//向下转型
        System.out.println(s1.getName());
}
if(stu2 instanceof Student){
        Student s2 = stu2;//stu2本来就是Student的一个实例,无需向下转型
        System.out.println(s2.getName());
}
总结:
instanceof操作符的作用是判断一个变量是否是右操作符指出的类的一个对象,由于java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象,这时就可以使用instanceof了。当左操作数是右操作数指出的类的实例或者是子类的实例时都返回真,如果是将一个子类的实例赋值给一个父类的变量,用instanceof判断该变量是否是子类的一个实例时也将返回真。在接口中的应用也是如此。
作者: moonlight    时间: 2011-11-22 10:15
简单的说是:
判断对象属于哪种类型的
if(obj instanceof class)
{
}
其返回true情况如下
1.obj是class类的对象
2.obj是class类子类的对象
作者: 唐柏平    时间: 2011-11-22 11:02
判断某一对象是否是某个类的实例
(1)、instance of 运算符
对象名  instance of 类名(接口名) 返回布尔值
(2)、将强制类型转换和instance of 混合使用
作者: 王丰盛568    时间: 2011-11-22 17:08
instanceof 运算符
返回一个 Boolean 值,指出对象是否是特定类的一个实例。
result = object instanceof class
参数
result
必选项。任意变量。
object
必选项。任意对象表达式。
class
必选项。任意已定义的对象类。
说明
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

示例
下面的例子举例说明了 instanceof 运算符的用法。

function objTest(obj){
   var i, t, s = "";   // 创建变量。
   t = new Array();   // 创建一个数组。
   t["Date"] = Date;   // 填充数组。
   t["Object"] = Object;
   t["Array"] = Array;
      for (i in t)
      {
         if (obj instanceof t[i])   // 检查 obj 的类。
         {
            s += "obj is an instance of " + i + "\n";
         }
         else
         {
            s += "obj is not an instance of " + i + "\n";
         }
   }
   return(s);   // 返回字符串。
}

var obj = new Date();
response.write(objTest(obj));









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