==:
当==作用于基本数据类型时,比较的是他们两个的值
当==作用于引用类型的变量时,比较的是引用类型变量所指向对象的地址
equals:
equals不能作用域基本数据类型
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
int a=3;
int b=3;
System.out.println(a==b);//true
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true
未重写的equals--Object:
比较的仍是地址信息
重写的equals--String:
1.先比较两个对象的地址是否相同,地址相同的话内容肯定就一样
2.在比较该对象是否是String类型的
3.类型相同时在比较其长度
4.长度相同时将其拆分成字符数组,再一一进行比较
简而言之:
==比较的是地址
equals比较的是内容
isAssignableFrom:
jdk描述:
判定此 Class
对象所表示的类或接口与指定的 Class
参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true
;否则返回 false
。如果该 Class
表示一个基本类型,且指定的 Class
参数正是该 Class
对象,则该方法返回 true
;否则返回 false
。
Father f = new Father();
Child c = new Child();
System.out.println(Father.class.isAssignableFrom(Child.class));//true
System.out.println(Child.class.isAssignableFrom(Father.class));//false
getClass()和类名.class:
getClass():从一个类的实例获得类类型
类名.class:当前类的类类型
相同点:
都可以获得某个类的类类型
不同点:
出现时期不同:
getClass()和Class.forName()是运行时加载,是动态加载
类名.class是编译器加载,是静态加载
instanceof:
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。
Father f = new Father();
Child c = new Child();
System.out.println(c instanceof Father);//true
System.out.println(f instanceof Child);//false
总结:
isAssignableForm:当前类是否为该类的父类或是其接口
isAssignableFrom是父-->子
isAssignableFrom是接口->实现
instanceof :当前类是否为该类的子类或是其接口的实现类
instanceof 是子-->父
instanceof 是实现-->接口
isInstance:
jdk描述:
判定指定的 Object
是否与此 Class
所表示的对象赋值兼容。此方法是 Java 语言 instanceof
运算符的动态等效方法。如果指定的 Object
参数非空,且能够在不引发 ClassCastException
的情况下被强制转换成该 Class
对象所表示的引用类型,则该方法返回 true;否则返回 false
。
特别地,当该 Class
对象表示一个已声明的类时,若指定的 Object
参数是所表示类(或其任一子类)的一个实例,则此方法返回 true
;否则返回 false
。如果此 Class
对象表示一个数组类,且通过身份转换或扩展引用转换,指定的 Object
参数能转换为一个数组类的对象,则返回 true
;否则返回 false
。如果此 Class
对象表示一个接口,且指定 Object
参数的类或任一超类实现了此接口,则此方法返回 true
;否则返回 false
。如果此 Class
对象表示一个基本类型,则此方法返回 false
。
System.out.println(c instanceof Father);//true
System.out.println(f instanceof Child);//false
System.out.println(Child.class.isInstance(f));//false
System.out.println(Father.class.isInstance(c));//true
Father f1 =c;
//Child c1 = (Child) f;//报错
此方法是 Java 语言 instanceof
运算符的动态等效方法。如果指定的 Object
参数非空,且能够在不引发 ClassCastException
的情况下被强制转换成该 Class
对象所表示的引用类型,则该方法返回 true;否则返回 false
。
即当一个对象转为另一个对象不会抛出异常时,isInstance运算为treu,否则为false