黑马程序员技术交流社区

标题: instanceof的具体用法和实例 [打印本页]

作者: 箫庐    时间: 2011-12-15 17:15
标题: instanceof的具体用法和实例
请教instanceof的具体用法和一些实例:看了百科里面的解释,还是觉得有点模糊,能不能简明扼要的说一些呢,并举一些例子~~
作者: panjone    时间: 2011-12-15 17:19
instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
     
用法:
result = object instanceof class
参数:
result
必选项。任意变量。
object
必选项。任意对象表达式。
class
必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

例如:
Boolean b;  
String str = "foo";  
b = ( str instanceof String );   // true
b = ( str instanceof Object );   // also true
b = ( str instanceof Date );     // false, not a Date or subclass

注意:
1)null值不是任何对象的实例,所以下面这个例子返回了false,无论这个变量声明的是什么类型。
String s = null;
if ( s instanceof String )
    // false, won't happen
2)instanceof也可以正确的报告一个对象是否是数组和特定的接口类型。
if ( foo instanceof byte[] )
作者: 宋双    时间: 2011-12-15 17:23
instanceof是Java的一个二元操作符。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

网上有个例子不错,帮你粘贴下

public interface A{}
public class B implements A{
  public static void main(String[] args){
     A a=null;
     B b=null;
     if(a instanceof A){
       System.out.println("true 1");
     }
     else{
       System.out.println("false 1");
     }
     if(b instanceof B){
       System.out.println("true 2");
     }
     else{
       System.out.println("false 2");
     }  
     a=new B();  
     if(a instanceof A){
       System.out.println("true 3");
     }
     else{
       System.out.println("false 3");
     }
     if(a instanceof B){
       System.out.println("true 4");
     }
     else{
       System.out.println("false 4");
     }
     b=new B();  
     if(b instanceof A){
       System.out.println("true 5");
     }
     else{
       System.out.println("false 5");
     }
     if(b instanceof B){
       System.out.println("true 6");
     }
     else{
       System.out.println("false 6");
     }
  }
}
输出结果是:
false 1
false 2
true 3
true 4
true 5
true 6
作者: 余松霖    时间: 2011-12-15 17:25
instanceof是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或接口的实例化。如果被测对象是null值,则测试结果总是false。     
String str = new String("测试");
System.out.println(str instanceof String);
//输出true。
作者: 黄喆    时间: 2011-12-15 17:48
本帖最后由 黄喆 于 2011-12-15 17:50 编辑

intanceof 是判断对象是否是同一类,例如:
class Student implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }

        public int hashCode()
        {
                return name.hashCode + age*33;
        }

        public boolean equals(Object obj)
        {
                if (!(obj instanceof(Student)))  // 判断所传入的对象是不是Student,如果不是,则直接抛异常退出程序
                        throw new ClassCastException("类型不匹配");
               
                Student s = (Student)obj;
                return (this.name)equals(s.name)&&(this.age)==(s.age);

        }
}
作者: 郝亚平    时间: 2011-12-15 18:31
本帖最后由 郝亚平 于 2011-12-15 18:33 编辑

自己以前的总结:

本txt旨在于纠正自己的一个对于instanceof的错误意识。习惯了面向对象的编程思路,结果,就容易在这个地方思考错误。

看代码例子:

class InstanceOf{
        public static void main(String[] args){
                 System.out.println("hello" instanceof String);//true
  ////XXXX: System.out.println("hello" instanceof (String));
  ////XXXX: System.out.println("hello".instanceof String);
  ////XXXX: System.out.println(("hello").instanceof String);
  ////XXXX: System.out.println("hello" instanceof "String");
        }
}



看上面的执行代码,只有第一种才是正确的呀。这个看上去挺特别的呀。因为,按照我的思维,应该至少是带有点号操作的,就是像是上面的3,4去写。但是,后来一想,类或者对象才具备这种功能。但是,这个"hello"也是String的实例对象呀。但是这里就是不能这样子写。

注意:上面只有第一种是正确的应用方法。即使是类型添加了小括号的那个也是不可以的哇。其余的都是不正确的呀。自己都测试过啦。
作者: 李振元    时间: 2011-12-15 19:12
通俗的讲:instanceof就是用来判断一个对象是不是类的实例。个人理解。
作者: 王--明    时间: 2011-12-15 20:34
instanceof就是用来判断一个对象是不是类的实例   就是如此




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