`
sunnylocus
  • 浏览: 869604 次
  • 性别: Icon_minigender_1
  • 来自: 美国图森
社区版块
存档分类
最新评论

Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别

    博客分类:
  • Java
阅读更多

原地址:http://topic.csdn.net/t/20050127/15/3758173.html

我略作了下修改

Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。  
格式为:
        Class1.isAssignableFrom(Class2)  
  调用者和参数都是java.lang.Class类型。   
  而instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
  格式是:o instanceof TypeName     
  第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

package com.bill99.pattern;

public class AssignableTest {
	
	public AssignableTest(String name) {
	}
	/**
	 * 判断一个类是否是另一个类的父类
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom1() {
		System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class));
	}
	/**
	 * 判断一个类是否是另一个类的父类
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom2() {
		System.out.println("Object是String的父类:"+Object.class.isAssignableFrom(String.class));
	}
	/**
	 * 判断一个类是否和另一个类相同
	 * 是打印true
	 * 否打印false
	 */
	public static void testIsAssignedFrom3() {
		System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class));
	}

	/**
	 * 判断str是否是Object类的实例
	 * 是打印true
	 * 否打印false
	 */
	public static void testInstanceOf1() {
		String str = new String();
		System.out.print("str是Object的实例:");
		System.out.println(str instanceof Object);
	}
	/**
	 * 判断o是否是Object类的实例
	 * 是打印true
	 * 否打印false
	 */
	public static void testInstanceOf2() {
		Object o = new Object();
		System.out.print("o是Object的实例:");
		System.out.println(o instanceof Object);
	}
	
	public static void main(String[] args) {
		testIsAssignedFrom1();
		testIsAssignedFrom2();
		testIsAssignedFrom3();
		testInstanceOf1();
		testInstanceOf2();
	}
}

 结果:

String是Object的父类:false
Object是String的父类:true
Object和Object相同:true
str是Object的实例:true
o是Object的实例:true

分享到:
评论
7 楼 jnjeC 2019-02-26  
jake_12345 写道
大哥,这写错了吧
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
源码注释就是楼主说的这样的意思,应该没错。理解这个方法名称的时候要将方法参数作为主语。
例如        System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class)); 
可以用中文来表达:
Object.class isAssignableFrom String.class.
Object.class 是不是从String.class 分配 。
6 楼 qq412796770 2018-01-04  
大哥,百度第一条就是你的,好歹也修改一下吧  
5 楼 技术无涯苦作舟 2017-09-19  
大哥,百度第一条就是你的,好歹也修改一下吧
4 楼 lgh1992314 2017-08-16  
大哥,百度第一条就是你的,好歹也修改一下吧
3 楼 Alex_Cin 2017-04-05  
大哥,百度第一条就是你的,好歹也修改一下吧
2 楼 xiaomabobo 2016-10-11  
大哥,百度第一条就是你的,好歹也修改一下吧
1 楼 jake_12345 2016-03-15  
大哥,这写错了吧
Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。

相关推荐

Global site tag (gtag.js) - Google Analytics