Java中有判断相等性 == ,equals() 方法
==判断相等性
== 判断基本数据类型的相等性,基本数据类型的变量字面量相等,即返回true.
== 判断引用类型的相等性,只有是相同引用类型的相同引用,才会返回true.
== 判断基本数据类型和包装类的相等性,只有基本数据类型的字面量和包装类型的值相等,才会返回true.
特别:String是引用类型,不是基本数据类型。String s="ff" ;s是一个引用,与f=new String("ff")不是同一个引用,所以s==f 返回false.
Integer i=new Integer(11);
int k=11;
Integer j=new Integer(11);
System.out.println(i==j); //false
System.out.println(k==i); //true
System.out.println(i.equals(j)); //true
System.out.println("i="+i.hashCode()); //11
System.out.println("j="+j.hashCode()); //11
### equals()方法判断引用类型的相等性
1. 如果是同一个引用,那么会直接返回true 2. 如果不是同一个引用,那么会判断类型是否相同,然后判断字面量是否相等,如果相等,那么会直接返回true.
记住一个原则,如果equals()返回true,那么对象的hashcode是相等的。不要颠倒。
重写equals方法一个示例 ``` public class Base { private int a; private int b;
public Base(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; //利用getClass判断引用类型是否是统一类型
Base base = (Base) o;
return a == base.a &&
b == base.b;
}
@Override
public int hashCode() {
return Objects.hash(a, b);
}
}
### 判断引用类型是否同一个类型
java中有instanceof 关键词判断对象的类型
1. 可以使用 a instanceof Object 方法判断某个对象变量是否属于某一个类型
2. 使用a.getClass()==b.getClass() 方法判断两个变量是否是相同类型
<br/>
引用类型之间的转换,转换关系通常发生在继承关系的类中。
<br/>
父类与子类之间的转换关系有:向上转换,向下转换。
<br/>
其中super 不能向下转换,转换成为子类
子类child能进行向上转换,转换成为父类,子类转换成为父类是隐式转换。
<br/>
但是如果父类变量实际引用指向子类对象,那么这个时候父类能转换成为子类,属于强制转换。
Base base=new Base(1,2); //父类
Child child=new Child(2,3,5); //子类
Base b=child; //子类转换成为父类
Child v= (Child) b; //父类转换成子类,前提是必需有上一步操作。