欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中instanceof与Class的等价性代码示例

程序员文章站 2023-11-20 20:10:58
本文研究的主要是java中instanceof与class的等价性的相关问题,具体如下。 java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一...

本文研究的主要是java中instanceof与class的等价性的相关问题,具体如下。

java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

实例1(instanceof)

接口person

public interface person {
public void eat();
}

实现类people

public class people implements person {
private int a=0;
 @override
 public void eat() {
 system.out.println("======"+a);
 
 }

}

子类xiaoming:

public class xiaoming extends people {
private string name;

@override
public void eat() {
 system.out.println("+++++++++");
}
}

主函数

public static void main(string[] args) {
 people p=new people();
 xiaoming x=new xiaoming();
 system.out.println(p instanceof person);
 system.out.println(p instanceof xiaoming); -----2
 system.out.println(x instanceof person);
 system.out.println(x instanceof people);
 }

注意:上面2处的代码在编译时不会报错。

运行结果:

true
false
true
true

实例2

package com.test.class_obj;
class base {
}
class derived extends base {
}
public class familyvsexacttype {
	static void test(object x) {
		system.out.println("testing x of type " + x.getclass().getsimplename());
		system.out.println("-----------------------------------------");
		system.out.println("x instanceof base " + (x instanceof base));
		system.out.println("x instanceof derived " + (x instanceof derived));
		system.out.println("-----------------------------------------");
		system.out.println("base.isinstance(x) " + base.class.isinstance(x));
		system.out.println("derived.isinstance(x) " +
		        derived.class.isinstance(x));
		system.out.println("-----------------------------------------");
		system.out.println("x.getclass() == base.class " +
		        (x.getclass() == base.class));
		system.out.println("x.getclass() == derived.class " +
		        (x.getclass() == derived.class));
		system.out.println("x.getclass().equals(base.class)) " +
		        (x.getclass().equals(base.class)));
		system.out.println("x.getclass().equals(derived.class)) " +
		        (x.getclass().equals(derived.class)));
		system.out.println("*****************************************");
		system.out.println("*****************************************");
	}
	public static void main(string[] args) {
		test(new base());
		test(new derived());
	}
}

输出内容如下:

testing x of type base
-----------------------------------------
x instanceof base true
x instanceof derived false
-----------------------------------------
base.isinstance(x) true
derived.isinstance(x) false
-----------------------------------------
x.getclass() == base.class true
x.getclass() == derived.class false
x.getclass().equals(base.class)) true
x.getclass().equals(derived.class)) false
*****************************************
*****************************************
testing x of type derived
-----------------------------------------
x instanceof base true
x instanceof derived true
-----------------------------------------
base.isinstance(x) true
derived.isinstance(x) true
-----------------------------------------
x.getclass() == base.class false
x.getclass() == derived.class true
x.getclass().equals(base.class)) false
x.getclass().equals(derived.class)) true
*****************************************
*****************************************

process finished with exit code 0

通过以上测试可以得出以下结论:

  • instanceof() 和 isinstance() 生成的结果相同
  • equals() 和 == 生成的结果相同
  • 父类可以是子类的实例,但子类不可以是父类的实例
  • class 对象比较时,不考虑继承

总结

以上就是本文关于java中instanceof与class的等价性代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!