instanceof 用於檢測指定對象是否是某個類(本類、父類、子類、介面)的實例。Java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 返回true或false。 如果對任何具有null值的變數應用instanceof運算符,則返回false。用法:Boolean r ...
instanceof
用於檢測指定對象是否是某個類(本類、父類、子類、介面)的實例。Java中的instanceof也稱為類型比較運算符,因為它將類型與實例進行比較。 返回true或false。 如果對任何具有null值的變數應用instanceof運算符,則返回false。用法:Boolean result = object instanceof class;
本類對象一定是本類的實例,如果本類有父類或介面,則此對象也是父類或介面的實例;如果本類有子類,則此對象不是子類的實例。如果父類對象引用子類的實例,則此對象是父類到子類之間的繼承鏈上所有類的實例。
例如:如果三個類存在以下繼承關係:C繼承B,B繼承A,即A<-B<-C,
對象 C c=new C();,則c instanceof C為true;c instanceof B為true;c instanceof A為true;
對象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;
下麵是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 操作符的左右操作數必須有繼承或實現關係,否則編譯出錯。
transient
此關鍵字用於指定一個變數不能被序列化。一個對象只要實現了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
工作、學習、交流或有任何疑問,請聯繫郵箱:[email protected]