用于检测指定对象是不是某个类(本类、父类、子类、接口)的实例。Java中的instanceof也称为类型比较运算符,由于它将类型与实例进行比较。 返回true或false。 若是对任何具备null值的变量应用instanceof运算符,则返回false。用法:Boolean result = object instanceof class;html
本类对象必定是本类的实例,若是本类有父类或接口,则此对象也是父类或接口的实例;若是本类有子类,则此对象不是子类的实例。若是父类对象引用子类的实例,则此对象是父类到子类之间的继承链上全部类的实例。学习
例如:若是三个类存在如下继承关系:C继承B,B继承A,即A<-B<-C,spa
对象 C c=new C();,则c instanceof C为true;c instanceof B为true;c instanceof A为true;htm
对象A a=new C();,则a instanceof C为true;a instanceof B为true;a instanceof A为true;对象
对象A a=new A();,则a instanceof C为false;a instanceof B为false;a instanceof A为true;blog
下面是instanceof的经常使用用法:继承
boolean b1 = "Sting" instanceof Object;接口
b1为true 由于String是Object的子类生命周期
boolean b2 = new String() instanceof String;内存
b2为true
boolean b3 = new Object() instanceof String;
b3为false Object是父类
boolean b4 = 'A' instanceof Character;
编译不经过 ‘A’在此处视为基本数据类型char,instanceof操做符只能用做对象的判断
boolean b5 = null instanceof String;
b5为false 这是instanceof 特 有 的 规 则 : 若左操做数为null, 结果就直接返回false, 再也不运算右操做数是什么类。
boolean b6 = (String)null instanceof String;
b6为false 即便类型转换仍是个 null
boolean b7 = new Date() instanceof String;
编译不经过 instanceof 操做符的左右操做数必须有继承或实现关系,不然编译出错。
此关键字用于指定一个变量不能被序列化。一个对象只要实现了Serializable接口,这个对象就能够被序列化。咱们没必要关心具体序列化的过程,只要这个类实现了Serilizable接口,这个类的全部属性和方法都会自动序列化。然而在实际开发过程当中,咱们经常会遇到某个类的有些属性须要序列化,而其余属性不须要被序列化,这些不须要被序列化的变量就能够加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
transient关键字为咱们提供了便利,你只须要实现Serializable接口,将不须要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
一旦变量被transient修饰,变量将再也不是对象持久化的一部分,该变量内容在序列化后没法得到访问。
transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量若是是用户自定义类变量,则该类须要实现Serializable接口。
被transient关键字修饰的变量再也不能被序列化,一个静态变量无论是否被transient修饰,均不能被序列化。
被transient关键字修饰的变量某些状况也能够被序列化。在Java中,对象的序列化能够经过实现两种接口来实现,若实现的是Serializable接口,则全部的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西能够自动序列化,须要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。
转载请注明出处 https://www.cnblogs.com/Y-oung/p/9113323.html
工做、学习、交流或有任何疑问,请联系邮箱:yy1340128046@163.com