★ 为重点,面试中这样答就很完美~
== 运算符:
== :它是个运算符,“等于”
可以使用在基本数据类型变量和引用数据类型变量中;
★ 如果比较的是基本数据类型变量:比较两个变量保存的数据(值)是否相等。(类型不一定非要一样,除了boolean型与其他类型不能比,其他基本数据类型相互之间都能比);
public class Test {
public static void main(String[] args) {
int a = 20;
int b = 20;
double c = 20.0;
System.out.println(a == b);//true;int和int比
System.out.println(a == c);//true;int和double比
boolean d = true;
//编译报错;boolean型不能和其他基本数据类型比较
// System.out.println(a == d);//int和boolean比
char e = 20;
System.out.println(e == a);//true;
char f = 'a';//'字符a'的ASCII码表中对应数字97
char g = 97;//把97赋给char型的变量g
System.out.println(f == g);//true
}
}
★ 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.也就是栈空间中的两个引用(对象名)是否指向堆空间中同一个对象实体;
举例:创建一个Person类,声明两个属性并提供有参构造器,然后测试:
public class Test {
public static void main(String[] args) {
//我们自定义的Person类(引用数据类型)
Person p1 = new Person("Harry", 18);
Person p2 = new Person("Harry", 18);
System.out.println(p1 == p2);//false;因为new的是两个对象实体
//java中自带的String类
String s1 = new String("Harry");
String s2 = new String("Harry");
System.out.println(s1 == s2);//false;比较的是地址值s1,s2两个地址值不一样
//其他的引用数据类型(类,接口,数组)都一样......
}
}
equals()方法:
equals()的使用:
是一个方法,而不是运算符;只能适用于引用数据类型中
Object类中equals()的定义:(查看源码发现):
public boolean equals(Object obj) {
return (this == obj);
}
★ Object类中定义的equals()方法和"=="的作用是相同的:比较两个对象的地址值是否相同.
举例:
public class Test {
public static void main(String[] args) {
//我们自定义的Person类(引用数据类型)
Person p1 = new Person("Harry", 18);
Person p2 = new Person("Harry", 18);
System.out.println(p1.equals(p2));//false;
// Person类的父类是object类,object类中的equals方法没有重写,还是比较的是对象的地址值;
//java中自带的String类
String s1 = new String("Harry");
String s2 = new String("Harry");
System.out.println(s1.equals(s2));//true;
//String类中重写了equals方法,点进源码发现是对具体对象的内容的比较,而不是地址值了;
//java中的Date类
Date d1 = new Date(123456L);
Date d2 = new Date(123456L);
System.out.println(d1.equals(d2));//true;
//Date类中也重写了equals方法,在这也比较的是具体的内容
//其他的引用数据类型(类,接口,数组)都是一样就不一一举例了......
}
}
★ 像String、Date、File、包装类…等都是重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"具体内容"是否相同。
★ 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"具体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
重写的原则:比较两个对象的实体内容是否相同.
重写在编译工具中自带generate方法重写equals()方法和hashCode()方法;
总结:(图):
继续加油 ~ 冲冲冲 ~~! !