import java.util.Date;
public class Client{
public static void main (String[] args){
boolean b1 = "String" instanceof Object;
boolean b2 = new Object() instanceof String;
boolean b3 = 'A' instanceof Character;
boolean b4 = null instanceof String;
boolean b5 = (String)null instanceof String;
boolean b6 = new Date() instanceof String;
boolean b7 = new GeneriClass<String>().isDateInstance("");
}
}
class GeneriClass<T>{
public boolean isDateInstance(T t){
return t instanceof Date;
}
}
instanceof 是一个二元操作符,判断一个对象是不是一个类的实例或继承。返回true/false。
上面的代码,编译时会出错,
b3出错因为‘A’是一个基本的数据类型,不是实例或者Chaeracter的继承。
b6出错,这个就不用说了。
其余的正常,虽然可能返回false。
因为instanceof 的规则(左边操作数为null时,不管右边是什么,直接返回false),b4直接返回false。
null是一个万能类型,所以对null的转型无效,所以b5返回false.
b7因为泛型是为字节码服务的,所以T的类型在编译的时候是Object类型,而实际类型则为传入的实参类型String,所以编译可以通过,但是会返回false。[这个个人觉得可以这样理解Object o = new String("");boolean b8 = o instanceof Date; ]
Class另有"相似"的方法两枚:
isInstance(Object o) isAssignableFrom(Class c) 自己到API中看看区别。
public class Client{
public static void main (String[] args){
boolean b1 = "String" instanceof Object;
boolean b2 = new Object() instanceof String;
boolean b3 = 'A' instanceof Character;
boolean b4 = null instanceof String;
boolean b5 = (String)null instanceof String;
boolean b6 = new Date() instanceof String;
boolean b7 = new GeneriClass<String>().isDateInstance("");
}
}
class GeneriClass<T>{
public boolean isDateInstance(T t){
return t instanceof Date;
}
}
instanceof 是一个二元操作符,判断一个对象是不是一个类的实例或继承。返回true/false。
上面的代码,编译时会出错,
b3出错因为‘A’是一个基本的数据类型,不是实例或者Chaeracter的继承。
b6出错,这个就不用说了。
其余的正常,虽然可能返回false。
因为instanceof 的规则(左边操作数为null时,不管右边是什么,直接返回false),b4直接返回false。
null是一个万能类型,所以对null的转型无效,所以b5返回false.
b7因为泛型是为字节码服务的,所以T的类型在编译的时候是Object类型,而实际类型则为传入的实参类型String,所以编译可以通过,但是会返回false。[这个个人觉得可以这样理解Object o = new String("");boolean b8 = o instanceof Date; ]
Class另有"相似"的方法两枚:
isInstance(Object o) isAssignableFrom(Class c) 自己到API中看看区别。