本文编辑整理自:
http://caojunwei.iteye.com/blog/799000
结束!
在java中,
instanceof
是
关键字
,
是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例
;而
isAssignableFrom
不是关键
字,
只是class对象的一个方法,
是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口;
isInstance
也只是class对象的一个方法,用来判断对象是否属于某个类型的实例
instanceof 的使用格式是:
oo
instanceof
TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如 String,InputStream。
isAssignableFrom通常调用格式是
Class1.
isAssignableFrom(
Class2)
调用者和参数都是
java.lang.Class类型。
isInstance通常调用格式是
Class1.
isInstance(
oo)
第一个参数是具体的类名或接口名,例如 String,InputStream;第二个参数是对象实例名,
示例1
public class Test {public static void main ( String [] args ) {List < String > list = new ArrayList < String >();System.out.println(list instanceof List); System.out.println(list instanceof ArrayList); System.out.println(List.class.isInstance(list)); System.out.println(ArrayList.class.isInstance(list)); System.out.println(list.getClass()); System.out.println(List.class); System.out.println(ArrayList.class); System.out.println(list.getClass().isAssignableFrom(List.class)); System.out.println(list.getClass().isAssignableFrom(ArrayList.class));System . out . println ( List . class . isAssignableFrom ( list . getClass ()));}}
结果:
true
true
true
true
class java.util.ArrayList
interface java.util.List
class java.util.ArrayList
false
true
true
我们应该尽量少用instanceof 运算符,应该尽量用多态来替代它
示例2
文件1
public interface Accounts {}public class WaterAccounts implements Accounts {}public class ElectricityAccounts implements Accounts {}
文件2
public class test {public static void main ( String [] args ) {Accounts accsWater = new WaterAccounts ();Accounts accsElectricity = new ElectricityAccounts ();acceptAcounts ( accsWater );}/*第一种使用instanceof */public static void acceptAcounts ( Accounts accs ) {if ( accs instanceof WaterAccounts ) {System . out . println ( "收水费" );} else if ( accs instanceof ElectricityAccounts ) {System . out . println ( "收电费" );}}/*第二种使用多态 */public static void acceptAcounts ( WaterAccounts accs ) {System . out . println ( "收水费" );}public static void acceptAcounts ( ElectricityAccounts accs ) {System . out . println ( "收电费" );}}